正則表達式
^行首錨定 $行尾錨定
.匹配任意字符一次
\w匹配非空白字符一次
\s匹配空白字符一次
\d匹配數字一次
*表示前面的正則表達式會重復0到多次
+匹配前面的字符重復0到多次
.+ 相當于匹配多次任意字符,至少一次
\w+相當于匹配非空字符一到多次
?前面的字符匹配一次或不匹配
有一個上面兩種類似的{}表示前面的字符出現次數
{1,}相當于+ {0,1}相當于? {n}重復n次 {m,n}重復m到n次
{0,}不相當于* ,因為它匹配到的多個字符必需是重復的
\b匹配邊界 邊界指的是匹配的一邊是空格或換行(制表符也是空格)另一邊不是空格或換行
‘ {1,}\bab’ 比配ab前面至少一個空格 ‘\bc’匹配字符c前面是個空格或換行
多個符號聯合使用,匹配一般都是盡可能多的匹配(對*而言)
匹配是從前往后開始匹配,一段滿足會打印后再從當前位置開始繼續
a.b.*ab 匹配 ‘ adb erabqw ab’會取到’adb erabqw ab’
貪婪模式與非貪婪模式,這個都是針對重復匹配的符號而言的
*盡可能多的匹配字符,.*盡可能多的匹配任意字符,非貪婪模式*?可以匹配前面字符任意次,但盡量少的匹配
+盡可能多匹配前面的字符或表達式,至少一次,非貪婪模式+?匹配前面字符字少一次,但匹配次數要滿足后面的條件就截止了
?匹配0次或者一次,非貪婪模式??能不匹配前面的字符就不匹配(匹配也只能匹配一次)這個的非貪婪模式實際用處不大
{n,}匹配前面的字符盡可能多次,且不少于n次,非貪婪模式{n,}?匹配前面字符至少n次,但滿足了后面的匹配條件了就截止
{n,m}匹配前面字符n次到m次,但盡量多的匹配,非貪婪模式{n,m}?匹配前面的字符n到m次,但盡量少的匹配
其他標識符
\B 匹配不是邊界,本身不占字符 t\B匹配t的后面不是邊界(空格) \Bt匹配t的前面不是邊界
i\Bt 相當于匹配 it i\B t 不可能匹配得到
\D 匹配非數字
\S匹配非空白字符
\W匹配\w外的字符
[]匹配字符之一 [abc] [0b]
結構符號
‘|’ 或者符號
分組
(pattern)表達式\1 表示重復匹配前面的內容 1為默認的分組號
python中 (?P<name>exp) 分組捕獲,但是可以通過name訪問
斷言
表達式(?=exp) 斷言表達式右邊出現exp
(?<=exp)表達式 斷言表達式左邊有exp
(?!exp) (?<!exp)
正則表達式使用
模塊 re
類方法 result =re.match() re.search() re.fullmatch() re.findall() re.finditer() .split() .groud .sub()
對象方法 對re類的對象使用 regex =re.compile(‘正則表達式’)
result= regex.match() regex.search() regex.fullmatch()
regex.findall() regex.finditer()
它們的方法大部分都公有,使用后的執行效果也差不多,有的可能用的很少占不列出
匹配模式 re.M多行模式 re.S依然從頭開始找(默認模式)
類方法 result =re.func(‘正則表達式’,待匹配的字符串,[匹配模式])
對象方法 regex =re.compile(‘正則表達式’,[匹配模式])生成對象
result =func(待匹配的字符串)
re.match(‘b’,s) 默認從索引0開始匹配s,沒有匹配到返回空,無法設置
打印result值 <_sre.SRE_Match object; span=(0, 1), match=’b’>
re.compile(‘b’) 設置從索引10,開始匹配,返回值一樣
match(s)
re.search(‘b’,s) 從0開始匹配到第一個滿足表達式,返回與match類似,對象方法可以設置起始索引
<_sre.SRE_Match object; span=(8, 9), match=’a’>
search(s,10)
re.fullmatch() 全長匹配
regex.fullmatch(s,4,5) 匹配區間全長匹配
re.findall(‘正則’,s) regex.findall(s) 返回多次match匹配的結果的列表
re.finditer(‘正則’,s) regex.finditer(s) 返回迭代器, 迭代后返回match的對象
re.match() .split() .sub
匹配電子郵箱
^\w[\w\.-]+@\w[\w\.-]+\.[a-zA-Z]+
匹配html標記
<a[^<>]*href=[“‘]?([^”‘]+)[“‘]?[^<>]*>
匹配URL
(\w+)://([\S]+)
切割文本單詞
lst =re.split(‘[^-\w]+’,s)
d =defaultdict(lambda :0)
for line in f:
for sub in re.split(‘[^-\w]+’,line):
if len(sub) >0:
d[sub] +=1
本文來自投稿,不代表Linux運維部落立場,如若轉載,請注明出處:http://www.www58058.com/88246