元字符python
\w \s \d \W \S \D \n \t
\b ^ $
|
()
[][^]
量詞正則表達式
* + ?
{n} {n,} {n,m}
findall:從文件中選取須要的內容算法
返回一個列表,全部匹配 的項,沒有匹配到就返回一個空列表
spa
若是遇到分組,finall會優先顯示分組中的內容
code
(?:正則表達式)取消分組優先
對象
import re ret = re.findall("www.(baidu|oldboy).com","www.baidu.com") print(ret) #['baidu'] 這是由於findall會優先顯示分組中的內容 ret = re.findall("www.(?:baidu|oldboy).com","www.baidu.com") print(ret) #['www.baidu.com'] 能夠同過?:取消分組的優先級
(?P<組名>正則表達式) 表示個這個組起一個名
索引
(?P=組名)表示引用以前組的名字,引用部分匹配的內容必須和以前那個組名的內容相同內存
pattern = "<(?P<tag>.*?)>.*?</(?P=tag)>" #pattern = r'<(.*?)>.*?</\1>'與上面用法同樣 ret = re.search(pattern,"<alex>afjsh</alex>") print(ret) #<_sre.SRE_Match object; span=(0, 18), match='<alex>afjsh</alex>'> ret = re.search(pattern,"<alex>afjsh</egon>") print(ret) #None
search: 驗證用戶輸入內容「正則規則$」字符串
返回一個對象,經過.grop()取值
沒有匹配到會返回None,沒有.grou()方法
因此一般先判斷,再取值
if ret:
ret.gout()
若是遇到分組,經過索引能夠去各分組的內容
grouo(0) #==group()永遠是完整的匹配內容
match 驗證用戶輸入內容it
與search功能類型至關於
`search("^\d","134afdksj") #==》match("\d","134afdksj") 做用是同樣的
import re ret = re.match("\d+","213asflk32") if ret: print(ret.group()) #213 #等同與 ret = re.search("^\d+","213asflk32") if ret: print(ret.group()) #213
切割split
經常使用來
s1 = "alex8123egon1120boss_jin" ret = re.split("\d+",s1) print(ret) #['alex', 'egon', 'boss_jin'] #若是須要保留以什麼進行分割的,須要用的分組 ret = re.split("(\d+)",s1) print(ret) #['alex', '8123', 'egon', '1120', 'boss_jin']
ret = re.split("[ab]","afsdabcd") print(ret) #['', 'fsd', '', 'cd']這裏對字符串分割了倆次,先用a分割後再用b來進行分割
替換sub 和subn
#替換sub s = "alex|egon|boss_jin" print(s.replace("|","-")) #alex-egon-boss_jin s1 = "alex8123egon1120boss_jin" ret = re.sub("\d+","-",s1) #內部接受四個參數,能夠選擇替換次數,默認所有替換 print(ret) #alex-egon-boss_jin ret1 = re.subn("\d+","-",s1) print(ret1) #('alex-egon-boss_jin', 2) #subn會返回一個元組,顯示替換後的字符串和替換次數
compile 編譯正則規則,
運用場景:編譯正則規則,對多個字符串進行相同數據查找,節省時間,內存
obj = re.compile("\d{3}") #將正則表達式編譯成一個正則表達式對象, ret = obj.search("afskj234afjk") print(ret.group()) #234 ret1 = obj.search("afs2155fahfj") print(ret1.group()) #215
finditer #節省空間的方法,能夠和compile配合使用
ret = re.finditer("\d+","fsa213fajks24fjs243") print(ret)#<callable_iterator object at 0x000002703FFA9390> 一個迭代器 for i in ret: print(i.group()) #213 24 243