re模組詳解

2022-09-01 10:42:10 字數 3508 閱讀 2932

常用正規表示式符號12

3456

78910

1112

1314

1516

1718

1920

21'.'預設匹配除\n之外的任意乙個字元,若指定flag dotall,則匹配任意字元,包括換行

'^'匹配字元開頭,若指定flags multiline,這種也可以匹配上(r"^a","\nabc\neee",flags=re.multiline)

'$'匹配字元結尾,或e.search("foo$","bfoo\nsdfsf",flags=re.multiline).group()也可以

'*'匹配*號前的字元0次或多次,re.findall("ab*","cabb3abcbbac")  結果為['abb','ab','a']

'+'匹配前乙個字元1次或多次,re.findall("ab+","ab+cd+abb+bba") 結果['ab','abb']

'?'匹配前乙個字元1次或0

''匹配前乙個字元m次

''匹配前乙個字元n到m次,re.findall("ab","abb abc abbcbbb") 結果'abb','ab','abb']

'|'匹配|左或|右的字元,re.search("abc|abc","abcbabccd").group() 結果'abc'

'(...)'分組匹配,re.search("(abc)a(123|456)c","abcabca456c").group() 結果 abcabca456c

'\a'只從字元開頭匹配,re.search("\aabc","alexabc") 是匹配不到的

'\z'匹配字元結尾,同$

'\d'匹配數字0-9

'\d'匹配非數字

'\w'匹配[a-za-z0-9]

'\w'匹配非[a-za-z0-9]

's'匹配空白字元、\t、\n、\r , re.search("\s+","ab\tc1\n3").group() 結果'\t'

'(?p...)'分組匹配 re.search("(?p[0-9])(?p[0-9])(?p[0-9])","371481199306143242").groupdict("city") 結果

最常用的匹配語法12

345re.match 從頭開始匹配

re.search 匹配包含

re.findall 把所有匹配到的字元放到以列表中的元素返回

re.splitall 以匹配到的字元當做列表分隔符

re.sub      匹配字元並替換

反斜槓的困擾

與大多數程式語言相同,正規表示式裡使用"\"作為轉義字元,這就可能造成反斜槓困擾。假如你需要匹配文字中的字元"\",那麼使用程式語言表示的正規表示式裡將需要4個反斜槓"\\\\":前兩個和後兩個分別用於在程式語言裡轉義成反斜槓,轉換成兩個反斜槓後再在正規表示式裡轉義成乙個反斜槓。python裡的原生字串很好地解決了這個問題,這個例子中的正規表示式可以使用r"\\"表示。同樣,匹配乙個數字的"\\d"可以寫成r"\d"。有了原生字串,你再也不用擔心是不是漏寫了反斜槓,寫出來的表示式也更直觀。

僅需輕輕知道的幾個匹配模式12

3re.i(re.ignorecase): 忽略大小寫(括號內是完整寫法,下同)

m(multiline): 多行模式,改變'^''$'的行為(參見上圖)

s(dotall): 點任意匹配模式,改變'.'的行為

re模組 findall 詳解

1 import re2 kk re.compile r d 3 kk.findall one1two2three3four4 4 1,2,3,4 56 注意此處findall 的用法,可傳兩個引數 7 kk re.compile r d 8 re.findall kk,one123 9 1,2,3...

Python之re模組詳解

re.match 嘗試從字串的開始匹配乙個模式,如 下面的例子匹配第乙個單詞 import re text jgood is a handsome boy,he is cool,clever,and so on.m re.match r w s text if m print m.group 0 n...

二 re模組函式詳解

import re c re.compile abc type c c re.compile abc 備註 1.1 re.compile 返回乙個 預編譯過的正規表示式物件。1.2 方法文件 compile pattern,flags 0 compile a regular expression p...