用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']在需要多次使用同乙個正規表示式的情況下,應該將它進行編譯以獲得乙個 pattern 物件,然後直接呼叫這個 pattern 物件的方法。>>>
compiledpattern.search('m')
用 'm' 作引數來呼叫已編譯的 pattern 物件的 search 函式與用正規表示式和字串 'm' 呼叫 re.search 可以得到相同的結果,只是快了很多。 (事實上,re.search 函式僅僅將正規表示式編譯,然後為你呼叫編譯後的 pattern 物件的 search 方法。)
也可以採用一些引數,實現不同的特殊功能和語法變更。比如經常使用的忽略大小寫:re.match()p = re.compile('ab*', re.ignorecase)
決定 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模組的講解很簡單易懂,內容不多但起碼把人領進門了,...