標籤:一個 dal 沒有 編譯 sea pytho 注意 info 條件
re模組常用方法 :
import reret = re.findall(‘a‘, ‘eva egon yuan‘) # 返回所有滿足匹配條件的結果,放在列表裡,#re.findall( ‘Regex‘,‘待匹配字串‘) 返回待匹配字串中滿足運算式的字串print(ret) #結果 : [‘a‘, ‘a‘]ret = re.search(‘a‘, ‘eva egon yuan‘).group()#search方法在字串內尋找第一個滿足運算式的字串並返回一個正則對象地址# ,通過group()查看返回的內容,無匹配成功字串返回Noneprint(ret) #結果 : ‘a‘# 函數會在字串內尋找模式比對,只到找到第一個匹配然後返回一個包含匹配資訊的對象,該對象可以# 通過調用group()方法得到匹配的字串,如果字串沒有匹配,則返回None。ret = re.match(‘a‘, ‘abc‘).group()# 同search,不過只在字串開始處進行匹配,開始出沒有符合運算式的字串,返回None,# 匹配成功的話通過group()查看返回的字串print(ret)#結果 : ‘a‘ret = re.split(‘[ab]‘, ‘abcd‘) # 先按‘a‘分割得到‘‘和‘bcd‘,在對‘‘和‘bcd‘分別按‘b‘分割print(ret) # [‘‘, ‘‘, ‘cd‘]ret = re.sub(‘\d‘, ‘H‘, ‘eva3egon4yuan4‘, 1)#將數字替換成‘H‘,參數1表示只替換1個print(ret) #evaHegon4yuan4ret = re.subn(‘\d‘, ‘H‘, ‘eva3egon4yuan4‘)#將數字替換成‘H‘,返回元組(替換的結果,替換了多少次)print(ret) #結果: (‘evaHegonHyuanH‘,3)obj = re.compile(‘\d{3}‘) #將Regex編譯成為一個 Regex對象,規則要匹配的是3個數字ret = obj.search(‘abc123eeee‘) #Regex對象調用search,參數為待匹配的字串print(ret.group()) #結果 : 123import reret = re.finditer(‘\d‘, ‘ds3sy4784a‘) #finditer返回一個存放匹配結果的迭代器print(ret) # <callable_iterator object at 0x10195f940>print(next(ret).group()) #查看第一個結果print(next(ret).group()) #查看第二個結果# for i in ret: #可以對迭代器進行迭代,查看每一個內容# print(i.group())print([i.group() for i in ret]) #查看剩餘的左右結果
注意 :
1. findall的優先查詢 : ‘ ?: ‘ 為取消優先返回匹配
import reret = re.findall(‘www.(baidu|oldboy).com‘, ‘www.oldboy.com‘)print(ret) # [‘oldboy‘] 這是因為findall會優先把匹配結果組裡內容返回,如果想要匹配結果,取消許可權即可ret = re.findall(‘www.(?:baidu|oldboy).com‘, ‘www.oldboy.com‘)print(ret) # [‘www.oldboy.com‘]
2. split的優先順序查詢 :
ret=re.split("\d+","eva3egon4yuan")print(ret) #結果 : [‘eva‘, ‘egon‘, ‘yuan‘]ret=re.split("(\d+)","eva3egon4yuan")print(ret) #結果 : [‘eva‘, ‘3‘, ‘egon‘, ‘4‘, ‘yuan‘]#在匹配部分加上()之後所切出的結果是不同的,#沒有()的沒有保留所匹配的項,但是有()的卻能夠保留了匹配的項,#這個在某些需要保留匹配部分的使用過程是非常重要的。
例 :
分組命名 :
(?P<name>Regex) ,表示給分組起名字
(?P = name) 表示使用這個分組,這裡匹配到的內容應該和分組中的內容完全相同
python re模組