常用正規表示式符號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...