正規表示式,又稱規則表達式,(英文:Regular Expression,在程式碼中常簡稱為 regex、regexp 或 RE),它是電腦科學的一個概念。正規表示式通常被用來檢索、取代那些符合某個模式的文字。許多程式設計語言都支援利用正規表示式進行字串操作。例如在 Perl 中內建了一個功能強大的正規表示式引擎。正規表示式這個概念最初是由 Unix 中的工具軟體普及開的。正規表示式是對字串(包括普通字符(例如,a 到z 之間的字母)和特殊字符(稱為"元字符"))操作的一種邏輯公式,就是用事先定義好的一些特定字符、及這些特定字元的組合,組成一個"規則字串",這個"規則字串"用來表達對字串的一種過濾邏輯。正規表示式是一種文字模式,模式描述在搜尋文字時要匹配的一個或多個字串。
說了一大堆廢話,大家可能還是雲裡霧裡的,我們透過實例來說明一下,我們可以用正規表示式測試工具,或者python都可以,首先,我們輸入一段文字。
hello,my name is Tina,my phone number is 123456 and my web is http://tina.com.
[a-zA-z]+://[^\s]*
我們可以取得網頁鏈接,也就是文本中的url,是不是很神奇呢?
這是因為它有自己的符合規則,部分如下。
模式 | 描述 |
#. | 任意字元 |
0個或多個表達式 |
一個或多個表達式
# 關於更多的符合規則可自行查閱。
?,*, ,\d,\w #都是等價字元
##?等價於匹配長度{0,1}
*等價於符合長度{0,}
等於匹配長度{1,}
\d 等價於[0-9]
#\D 等價於[^0-9]
#\w 等價於[A-Za-z_0-9]
res = re.match('hello\s(\d+)sword')
貪婪匹配
res = re.match('hello.*(\d+)sword')
3.findall()
#我們最常用的就是這個,我們看看這個是如何使用的。
import re useData = str(input('请输入字符串数据:')) ''' 匹配字符串中的数字,+是匹配前面的子表达式一次或多次 ''' digital = re.findall('\d+',useData) print(digital)
findall()函數是傳回所有符合的字串,傳回值的資料類型為列表。
常用符號我們再來來說說正規表示式的常用符號吧。「[…]」為字元集。 “(.*?)” 是python爬蟲最常用的字符,叫做貪心演算法,可以匹配任意的字符。“.”字元為符合任意單一字元。
“\”字元為轉義字元。
下面我們來看一個範例程式碼。import re a=‘xxixxjshdxxlovexxsfhxxpythonxx' data=re.findall(‘xx(.*?)xx') print(data)登入後複製
我們運行一下,看下效果。
特別字元 | |
$ | 符合輸入字串的結尾位置。如果設定了 RegExp 物件的 Multiline 屬性,則 $ 也符合 ‘\n’ 或 ‘\r’。若要符合 $ 字元本身,請使用 $。|
() | |
* | |
. |
概念说了一大堆,大家可能也记不住,我直接说几个案例,大家就能明白其他的道理。
这是某网的HTML,部分片段如下:
<span class=“price”>§<i>123</i></span> <span class=“price”>§<i>133</i></span> <span class=“price”>§<i>156</i></span> <span class=“price”>§<i>189</i></span>
大家会发现只有中间的一段不一样,而不一样的数据就是我们想要的,我们怎么用正则表达式提取出来呢.
<span class=“price”>§<i>(.*?)</i></span>
就可以了,我们看看效果吧。
123
133
156
189
以上是基本原理是使用一系列特殊字元和語法來匹配和操作文字資料。正規表示式通常包括模式字串,用於描述要匹配的文字模式,以及一個或多個特殊字元和語法,用於控制匹配的方式和結果。 Python中的正規表示式通常使用re模組來實現的詳細內容。更多資訊請關注PHP中文網其他相關文章!