Python 正規表示式

2022-08-03 10:48:09 字數 2531 閱讀 1501

用perl的正規表示式習慣了,簡單直接,非常方便,但轉向python後,發現竟然和perl的方式不一樣,感覺有點不適應,不過仔細閱讀了關於python的正規表示式後,發現(re模組)其實也和perl差不多,只是表現形式不一樣。

這裡記錄的是直接了當的案例和少許解釋,只是為方便查閱。

使用raw字串

元字元:. ^ $ * + ? { [ ] \ | ( )

如果要匹配的正式元字元,就需要使用反斜槓\,但這樣有時會讓程式顯得很難看懂。

raw字串就是為了解決這個問題:在字串前加個 "r" 反斜槓,這就相當於perl中的單引號,讓字串不被任何特殊方式處理。

比如:r"\n" 就是包含"\" 和 "n" 的兩個字元,而 "\n" 則是乙個字元,表示乙個換行。

常規字串

raw 字串

"ab*"

r"ab*"

"\\\\section"

r"\\section"

"\\w+\\s+\\1"

r"\w+\s+\1"

正規表示式被編譯成 `regexobject` 例項,可以為不同的操作提供方法,如模式匹配搜尋或字串替換。

>>> 

import re

>>>

pattern = '^m?m?m?$'

>>>

re.search(pattern, 'm')

>>>

compiledpattern = re.compile(pattern)

>>>

dir(compiledpattern)

['findall', 'match', 'scanner', 'search', 'split', 'sub', 'subn']

>>>

compiledpattern.search('m')

用 'm' 作引數來呼叫已編譯的 pattern 物件的 search 函式與用正規表示式和字串 'm' 呼叫 re.search 可以得到相同的結果,只是快了很多。 (事實上,re.search 函式僅僅將正規表示式編譯,然後為你呼叫編譯後的 pattern 物件的 search 方法。)

在需要多次使用同乙個正規表示式的情況下,應該將它進行編譯以獲得乙個 pattern 物件,然後直接呼叫這個 pattern 物件的方法。

也可以採用一些引數,實現不同的特殊功能和語法變更。比如經常使用的忽略大小寫:

p = re.compile('ab*', re.ignorecase)

re.match()

決定 re 是否在字串剛開始的位置匹配.

re.search()

掃瞄字串,找到這個 re 匹配的位置.

>>> re.

match

("c"

,"abcdef"

)# no match

>>> re.

search

("c"

,"abcdef"

)# match

<_sre.sre_match object at ...>

search()中,也可以使用「^」來匹配字串開頭,就像perl中一樣。

>>> re.

match

("c"

,"abcdef"

)# no match

>>> re.

search

("^c"

,"abcdef"

)# no match

>>> re.

search

("^a"

,"abcdef"

)# match

<_sre.sre_match object at ...>

note however that in multiline

mode match()

only matches at the beginning of the string, whereas using search()

with a regular expression beginning with '^'

will match at the beginning of each line.

>>> re.

match

('x','a

\nb\nx',re

.multiline

)# no match

>>> re.

search

('^x','a

\nb\nx',re

.multiline

)# match

<_sre.sre_match object at ...>

findall()

找到 re 匹配的所有子串,並把它們作為乙個列表返回

finditer()

找到 re 匹配的所有子串,並把它們作為乙個迭代器返回

參考文件:

1. 2.

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模組的講解很簡單易懂,內容不多但起碼把人領進門了,...