Python 正規表示式

2021-07-30 06:45:51 字數 2610 閱讀 7740

最近研究python爬蟲,很多地方用到了正規表示式,但是沒好好研究,每次都得現查文件。今天就專門看看python正規表示式。本文參考了官方文件 re模組。

在很多程式語言中,由於有轉義字元這麼一種東西的存在,導致正規表示式需要使用兩個斜槓來處理。如果程式語言支援原始字串,那麼就不需要兩個斜槓了。在python中,字串前面新增字母r即可把字串變成原始字串。

下面是乙個正規表示式最簡單的使用例子。我們查詢所有以字母f開頭的單詞,不論大小寫。這個例子使用了正規表示式模組的re.findall函式,它會返回所有符合模式的列表。

import re

text = '**** **** it make she forest'

results = re.findall(r'\b[ff]\w+', text)

print(results)

如果某乙個模式需要經常使用,我們可以把它編譯為模式物件。然後從模式物件上呼叫各種正則查詢方法。這樣做的優點是:由於模式已經編譯了,所以後續的查詢速度會更快。

pattern = re.compile(r'\b[ff]\w+')

print(pattern.findall(text))

大部分查詢方法還可以接受乙個查詢標誌引數。查詢標誌讓正規表示式具有不同的行為。下面一一說明。

標誌作用

re.a、re.ascii

以ascii模式查詢,預設是unicode模式

re.debug

顯示編譯表示式的除錯資訊

re.i、re.ignorecase

忽略字母的大小寫

re.l、re.locale

以區域敏感方式查詢匹配

re.m、re.multiline

開啟多行模式,開啟之後行邊界符^$會匹配每行的開始和結束,而不是整個字串的開始和結束

re.s、re.dotall

使用此標誌,會讓點符號匹配所有字元,預設情況下點符號會匹配換行符以外的符號

re.x、re.verbose

開啟囉嗦模式,可以在寫正規表示式的時候新增注釋

下面是囉嗦模式的例子,來自python官方文件。

a = re.compile(r"""\d +  # the integral part

\. # the decimal point

\d * # some fractional digits""", re.x)

b = re.compile(r"\d+\.\d*")

查詢方法有兩種形式,第一種是re模組的函式,這些函式需要接受乙個模式字串。第二種就是從編譯好的模式物件上呼叫,這樣不需要模式字串了。基本上大部分方法都有這兩種形式,所以這裡只需要介紹一種形式。

在已編譯好的正規表示式物件上還有以下幾個屬性。

上面提到的很多方法都返回匹配物件。匹配物件包含了一些方法和屬性,方便我們進行查詢。

最常用的就是group函式,它會返回指定組對應的字串。下面的例子就查詢了給定資料中的資料量和每頁的條數。第0組返回整個匹配,第1組返回第乙個匹配,以此類推……也可以採用命名組的方式。

text = '總共20條資料 每頁5條'

pattern = re.compile(r'總共(?p\d+)條資料\s+每頁(?p\d+)條')

match = pattern.match(text)

print(match.group(0))

另乙個比較常用的函式就是groups(default=none),它返回所有組組成的元組。如果有的組沒有匹配到字串,就會顯示為none,這時候可以使用default引數指定預設值。

text = '總共20條資料 每頁5條'

pattern = re.compile(r'總共(?p\d+)條資料\s+每頁(?p\d+)條')

match = pattern.match(text)

print(match.groups())

# 結果

# ('20', '5')

groupdict(default=none)返回組名和字串組成的字典。還是上面的例子。

print(match.groupdict())

#

startend函式返回給定組的在字串的起始和結束索引,如果對應的組沒有任何匹配,則返回-1。下面的例子來自python官方文件,從電子郵件位址中去除remove_this。

>>> email = "tony@tiremove_thisger.net"

>>> m = re.search("remove_this", email)

>>> email[:m.start()] + email[m.end():]

'[email protected]'

match.span([group])返回給定組的起始索引和結束索引組成的元組。

以上就是python正規表示式的大部分內容了,靈活使用這些知識,可以獲得強大的功能。關於如何巧用,就看大家的智慧型了。

python正規表示式元字元 正規表示式

字元 描述將下乙個字元標記為乙個特殊字元 或乙個原義字元 或乙個 向後引用 或乙個八進位制轉義符。例如,n 匹配字元 n n 匹配乙個換行符。序列 匹配 而 則匹配 匹配輸入字串的開始位置。如果設定了 regexp 物件的 multiline 屬性,也匹配 n 或 r 之後的位置。匹配輸入字串的結束...

Python 正規表示式

1.在python中,所有和正規表示式相關的功能都包含在re模組中。2.字元 表示 字串的末尾 如 road 則表示 只有當 road 出現在乙個字串的尾部時才會匹配。3.字元 表示 字元中的開始 如 road 則表示 只有當 road 出現在乙個字串的頭部時才會匹配。4.利用re.sub函式對字串...

Python正規表示式

學習python自然而然就不得不面對正規表示式這個難題。當初在沒有學習python之前,自己也曾經嘗試著學習過正規表示式,但是那時候感覺很麻煩,很難懂,結果就是不了了之。但是現在學習python我用的書是 python基礎教程 第二版 這本書中對re模組的講解很簡單易懂,內容不多但起碼把人領進門了,...