元字符
. 匹配任意一個字符(不包括換行符)
[a-z] 字符集合,一個字符的集合,可匹配其中任意一個字符
[^a-z] 字符集合,匹配除集合內的任意一個字符
^ 匹配開始位置,多行模式下匹配每一行的開始
\b 匹配單詞開始或結束位置的字符
\B 匹配不位於單詞開始或結束位置的字符
\d 匹配一個數字, 相當於 [0-9]
\D 匹配非數字,相當於 [^0-9]
\s 匹配一個空白字符,包括換行符、制表符、空格。相當於 [ \f\r\n\t\v]
\S 匹配非空白字符
\w 匹配[a-zA-Z0-9_],包括中文
\W 匹配\w之外的字符
$ 匹配結束位置,多行模式下匹配每一行的結束
* 表示前面的正則表達式重復0次或多次
+ 表示前面的正則表達式重復至少1次
? 表示前面的正則表達式重復0次或1次
{n} 重復n次
{n,} 重復至少n次
{n,m} 重復n到m次
\ 轉義字符,跟在其后的字符將失去作為特殊元字符的含義,例如\\.只能匹配.,不能再匹配任意字符
x|y 匹配x或者y
(pattern) 分組,捕獲后會自動分配組號從1開始,key改變優先級
\數字 匹配對應的分組
(?:pattern)如果僅僅為了改變優先級,就不需要捕獲分組
(?<name>exp)分組捕獲,但是可以通過name訪問分組。python語法必須是(?P<name>exp)
(?=exp) 斷言exp一定在匹配的右邊出現,表示斷言后面一定有exp
(?<=exp) 斷言exp一定在匹配的左邊出現,表示斷言前面一定有exp前綴
(?<=...) 逆序肯定環視,表示所在位置左側能夠匹配括號內正則
(?!exp) 斷言exp一定不會出現在右側,也就是說斷言后面一定不是exp
(?<!exp) 斷言exp一定不會出現在左側
[a-z] 字符集合,一個字符的集合,可匹配其中任意一個字符
[^a-z] 字符集合,匹配除集合內的任意一個字符
^ 匹配開始位置,多行模式下匹配每一行的開始
\b 匹配單詞開始或結束位置的字符
\B 匹配不位於單詞開始或結束位置的字符
\d 匹配一個數字, 相當於 [0-9]
\D 匹配非數字,相當於 [^0-9]
\s 匹配一個空白字符,包括換行符、制表符、空格。相當於 [ \f\r\n\t\v]
\S 匹配非空白字符
\w 匹配[a-zA-Z0-9_],包括中文
\W 匹配\w之外的字符
$ 匹配結束位置,多行模式下匹配每一行的結束
* 表示前面的正則表達式重復0次或多次
+ 表示前面的正則表達式重復至少1次
? 表示前面的正則表達式重復0次或1次
{n} 重復n次
{n,} 重復至少n次
{n,m} 重復n到m次
\ 轉義字符,跟在其后的字符將失去作為特殊元字符的含義,例如\\.只能匹配.,不能再匹配任意字符
x|y 匹配x或者y
(pattern) 分組,捕獲后會自動分配組號從1開始,key改變優先級
\數字 匹配對應的分組
(?:pattern)如果僅僅為了改變優先級,就不需要捕獲分組
(?<name>exp)分組捕獲,但是可以通過name訪問分組。python語法必須是(?P<name>exp)
(?=exp) 斷言exp一定在匹配的右邊出現,表示斷言后面一定有exp
(?<=exp) 斷言exp一定在匹配的左邊出現,表示斷言前面一定有exp前綴
(?<=...) 逆序肯定環視,表示所在位置左側能夠匹配括號內正則
(?!exp) 斷言exp一定不會出現在右側,也就是說斷言后面一定不是exp
(?<!exp) 斷言exp一定不會出現在左側
*? 匹配任意次,但盡可能少重復
+? 匹配至少1次
?? 匹配0次或1次
{n,}? 匹配至少n次
{n,m}? 匹配至少n次,至多m次
+? 匹配至少1次
?? 匹配0次或1次
{n,}? 匹配至少n次
{n,m}? 匹配至少n次,至多m次
python的正則表達式
常量 (使用 |位或 開啟多種選項)
re.M 多行模式
re.S 單行模式
re.I 忽略大小寫
re.X 忽略表達式中的空白字符
方法
編譯
re.compile(pattern, flags=0)
設定flags,編譯模式,返回正則表達式對象regex
pattern就是正則表達式字符串,flags是選項。
單次匹配
re.match(pattern, string, flags=0)
regex.match(string[, pos[, endpos]])
match匹配從字符串開頭匹配,regex對象match方法可以重設置開始位置和結束位置。返回match對象
re.search(pattern, string, flags=0)
regex.search(string[, pos[, endpos]])
從頭搜索直到第一個匹配,regex對象search方法可以重設置開始位置和結束位置。返回match對象
re.fullmatch(pattern, string, flags=0)
regex.fullmatch(string[, pos[, endpos]])
整個字符串和正則表達式匹配
全文搜索
re.findall(pattern, string, flags=0)
regex.findall(string[, pos[, endpos]])
對整個字符串,從左到右匹配,返回所有匹配項的列表
re.finditer(pattern, string, flags=0)
regex.finditer(string[, pos[, endpos]])
對整個字符串,從左到右,返回所有匹配項,返回迭代器
匹配替換
re.sub(pattern, replacement, string, count=0, flags=0)
regex.sub(replacement, string, count=0)
使用pattern對字符串進行匹配,對匹配項使用replacement替換。
replacement可以是str,bytes,function
re.sub(pattern, replacement, string, count=0, flags=0)
regex.sub(replacement, string, count=0)
同sub返回一個元組(new_string, number_of_subs_made)
分割字符串(不能指定多個字符進行分割)
re.split(pattern, string, maxsplit=0, flags=0)
分割字符串
分組
使用小括號的pattern捕獲的數據陪放到組group中
match, search函數可以返回match對象;findall返回字符串列表;finditer返回一個個match對象
如果pattern中使用分組,如果有匹配的結果,會在match對象中
1.使用group(N)方式返回對象分組,1到N是對應的分組,0返回整個匹配的字符串
2.如果使用了命名分組,可以使用group('name')的方式分組
3.也可以使用groups()返回所有組
4.使用groupdict()返回所有命名的分組