1. 程式人生 > >正則表示式和re模組知識點彙總

正則表示式和re模組知識點彙總

"\^":匹配字元的開始
"\$":匹配字元的結尾
"[]":字元組
"[^a]":如果在字元組中以^開頭,就是除了a不匹配,其他的都匹配
"a|b":匹配字元a或b 注意:使用或關係的時候,要把長規則放在短規則的前面
"()"分組,需要對一個整體匹配規則量詞約束的,就對整體匹配規則加一個括號
字串最前面加上r 就是不再對這一行程式碼進行轉譯,輸入啥列印啥 (real)

".":匹配換行符以外的任意字元
"\w":匹配字母數字下劃線(word)
"\s":匹配任意的空白字元(space)
"\d":匹配任意數字(digit)
"\W":匹配非字母數字下劃線
"\S":匹配非空白字元
"\D":匹配非數字
"\D":匹配非數字


"\n":匹配一個換行符
"\t":匹配一個製表符
"\b":匹配一個單詞結尾

所有量詞都必須用在正則匹配規則的後面
量詞只對緊挨著它的那一個正則匹配規則生效
量詞預設是貪婪模式,儘可能多的匹配
如果量詞後面加一個"?"表示啟動非貪婪模式,儘可能少的匹配
"*":重複零次或多次
"+":重複一次或多次
"?":重複零次或一次
"{n}":重複n次
"{n,}":重複n次或多次
"{n,m}":重複n次到m次


re.findall():返回所有滿足匹配條件的結果,放在列表中
re.search():從前往後找,找到一個就返回,返回的是一個物件,
需要呼叫group()方法才能拿到結果
常用的格式:

res = re.search("e", "hello, world")
if res:
res.group()
re.match():從頭開始匹配,如果從頭開始可以匹配上就和re.search()一樣,
不然就返回None

re.search().group()和re.match().group()都能輸入引數,
指定獲取第幾個分組的值
如果不指定就不單單取分組內的,而取匹配結果
而re.findall()由於沒有group()這種方法,所以:
res = re.findall("www.(baidu|oldboy).com", "www.oldboy.com")

print(res) ->得到的結果是:['oldboy']
如果想拿到 ['www.oldboy.com'],就需要取消分組優先
就需要 res = re.findall("www.(?:baidu|oldboy).com", "www.oldboy.com")
print(res) ->得到的結果是:['www.oldboy.com']

re.sub(): res = re.sub("\d", "H", "dgf4fg61", count=2)
將"dgf4fg61"中的數字替換成"H",替換兩個
re.subn(): res = re.sub("\d", "H", "dgf4fg61")
將"dgf4fg61"中的數字替換成"H"
返回一個元組,其中一個值告訴你一共替換了幾次
re.compile():當一條規則需要反覆使用,就可以先對這條規則進行編譯
obj = re.compile("\d")
res = obj.findall("dfff5ggh7hh8")
print(res)
re.finditer():得到一個迭代器,迴圈之後每一個元素還要呼叫group()方法才能拿到值
res = re.finditer("\d", "djfj4fk6kkmb8")
for i in res:
print(i.group())