python正則匹配基礎知識和re庫的使用

2021-10-07 21:18:10 字數 2005 閱讀 2466

python正則的使用範圍十分廣泛,不論是在爬蟲中還是在專案開發過程中都離不開正則匹配,對於剛學習正則的人來說看到正則匹配的式子會感到很迷惑,不知所云,本文就從基礎的正則開始一步一步加強。

因為正規表示式也是用字串表示的,所以,我們要首先了解如何用字元來描述字元。

基本正則字串

\d:匹配乙個數字

\w:匹配乙個數字或字母

\s:匹配乙個空格

.:匹配任意字元

*:匹配任意個字元(包括0個)

+:匹配至少乙個字元

?:匹配0個或1個字元

^:匹配的表示式以^後的字元開始

$:匹配的表示式以$前的字元結束

a|b:匹配a或b

.*?:非貪婪匹配

python提供re模組,包含所有正規表示式的功能。為了避免python和正規表示式對轉義「\」造成衝突,re提供了『r』字首,例如r"\n" 表示包含 「\」 和 「n」 兩個字元的字串,而 「\n」 則表示只包含乙個換行符的字串。

如果乙個正規表示式要重複使用幾千次,出於效率的考慮,我們可以預編譯該正規表示式,接下來重複使用時就不需要編譯這個步驟了,直接匹配:

>>> import re

# 編譯:

>>> re_telephone = re.compile(r'^(\d)-(\d)$')

# 使用:

>>> re_telephone.match('010-12345').groups()

('010', '12345')

>>> re_telephone.match('010-8086').groups()

('010', '8086')

掃瞄整個字串找到匹配樣式的第乙個位置,並返回乙個相應的 匹配物件。如果沒有匹配,就返回乙個 none。

如果 string開始的0或者多個字元匹配到了正規表示式樣式,就返回乙個相應的 匹配物件 。 如果沒有匹配,就返回 none ;注意即便是 multiline 多行模式, re.match() 也只匹配字串的開始位置,而不匹配每行開始。

用 pattern 分開 string 。 如果在 pattern 中捕獲到括號,那麼所有的組裡的文字也會包含在列表裡。如果 maxsplit 非零, 最多進行 maxsplit 次分隔, 剩下的字元全部返回到列表的最後乙個元素。

>>> re.split(r'\w+', 'words, words, words.')

['words', 'words', 'words', '']

>>> re.split(r'(\w+)', 'words, words, words.')

['words', ', ', 'words', ', ', 'words', '.', '']

>>> re.split(r'\w+', 'words, words, words.', 1)

['words', 'words, words.']

>>> re.split('[a-f]+', '0a3b9', flags=re.ignorecase)

['0', '3', '9']

對 string 返回乙個不重複的 pattern 的匹配列表, string 從左到右進行掃瞄,匹配按找到的順序返回。如果樣式裡存在一到多個組,就返回乙個組合列表;就是乙個元組的列表(如果樣式裡有超過乙個組合的話)。空匹配也會包含在結果裡。

re.sub用於替換字串中的匹配項。先用pattern匹配到string中要替換的物件,然後用repl替換掉即可,repl可以是表示式也可以是函式,具體實現參考

轉義 pattern 中的特殊字元。如果你想對任意可能包含正規表示式元字元的文字字串進行匹配,它就是有用的。比如

Python基礎知識 正則

import re str4 r id w w w s re.match str4,id 3aea5f99 6797 48bc 8b62 767a16d748c1 print s,type s if str s none print 1 else print 2 python正則寫法 1 匯入re ...

正則基礎知識

g 全域性匹配 i 忽略大小寫 gi 以上組合 匹配乙個輸入或一行的開頭,a 匹配 an a 而不匹配 an a 匹配乙個輸入或一行的結尾,a 匹配 an a 而不匹配 an a 匹配前面元字元0次或多次,ba 將匹配b,ba,baa,baaa 匹配前面元字元1次或多次,ba 將匹配ba,baa,b...

基礎知識 正則

正規表示式簡介 測試字串的內的模式看字串是否符合規範,就是資料驗證 替換文字 在字串內提取子字串 正規表示式語法 一.普通字元 符號表示,前面的乙個字元至少出現一次 1 runoo b可以匹配runoob,runooob,runoooob等 符號表示,前面的乙個字元可以出現0次或者一次或者多次 0 ...