元字符metacharacter
. 除換行符外的任意一個字符
[abcd] 集合里的任意一個字符
[^abcd]除集合里的字符的任意一個字符
[a-z] 字符范圍,范圍內的任意一個字符
\b 單詞的邊界 例:\ba在文本中找到以a開頭的字符,a\b以a結尾的字符
\B 不匹配單詞的邊界 例:t\B包含t不以t結尾的字符,\Bt含有t不以t開頭的字符
\d 任意一位0-9的數字
\D 一位非數字
\s 一位空白字符,包括換行符、制表符、空格
\S 一位非空白字符
\w 匹配[a-zA-Z0-9],包括中文
\W 匹配\w之外的字符
重復
* 重復0次或多次
+ 重復至少一次
?重復0次或1次
{n} 重復n次
{n,} 重復至少n次
{n,m} 重復n-m次
x|y 匹配x或者y
(pattern) 分組,分配組號,從1開始
(?:pattern) 去掉分組,只為改變優先級
(?<name>exp) 給分組命名
零寬斷言
(?=exp) 斷言exp一定在匹配的右邊出現
(?<=exp) 斷言exp一定在匹配的左邊出現
(?!exp) 斷言exp一定不在匹配的右邊出現
(?<!exp) 斷言exp一定不在匹配的左邊出現
斷言不占分組號
貪婪和非貪婪
默認是貪婪模式,盡可能多的取
*?匹配任意次,盡可能少重復
+?匹配至少1次,盡可能少重復
?? 匹配0次或1次,盡可能少重復
{n,}? 匹配至少n次,盡可能少重復
{n,m}? 匹配至少n次,至多m次,盡可能少重復
單行模式和多行模式
單行模式:.可以匹配所有字符,包括換行符。
^表示整個字符串的開頭,$整個字符串的結尾
多行模式:.不包括換行符
^表示行首,$表示行位
python的RE
使用re模塊(import re)
re.M多行模式,re.S單行模式,re.I忽略大小寫
編譯:re.compile(pattern,flags=0)
regex=re.compile(pattern,flags=0)
單詞匹配
re.match(pattern,string,flags=0)
regex.match(string,[2,4])
匹配從字符串的開頭匹配,regex可以重新設定開始和結束位置,返回match對象
re.search(pattern,string,flags=0)
regex.search(string,[2,4])
從頭搜索直到第一個匹配,regex可以重新設定開始和結束位置,返回match對象
re.fullnmath(pattern,string,flags=0)
regex.fullmatch(string,[2,4])
整個字符串和正則表達式匹配
全部匹配
re.findall(pattern,string,flags=0)
regex.findall(string,[2,4])
整個字符串,從左至右匹配,返回所有匹配項的列表
re.finditer(pattern,string,flags=0)
regex.finditer(string,[2,4])
整個字符串,從左至右匹配,返回所有匹配項,返回迭代器
每次迭代返回的是match對象
匹配替換
re.sub(pattern,replacement,string,count=0,flags=0)
regex.sub(replacement,string,count=0)
使用pattern對字符串string進行匹配,對匹配項使用replacement替換,
replacement可以是string,bytes,function。
re.subn(pattern,replacement,string,count=0,flags=0)
regex.subn(replacement,string,count=0)
同sub 返回一個元組(new_string,number_of_subs_made)
分割字符串
re.split(pattern,string,maxsplit=0,flags=0)
本文來自投稿,不代表Linux運維部落立場,如若轉載,請注明出處:http://www.www58058.com/88245