方法使用
1. compile(正則表達(dá)式) - 編譯創(chuàng)建正則表達(dá)式對(duì)象
re_obj = re.compile(r'\d{3}')
re_obj.fullmatch('234')
re.fullmatch(r'\d{3}', '345')
a.獲取匹配結(jié)果:
匹配對(duì)象.group() - 獲取整個(gè)正則表達(dá)式匹配到的結(jié)果
匹配對(duì)象.group(N) - 獲取第N分組匹配到的結(jié)果b.獲取匹配結(jié)果在原字符串中的范圍
匹配對(duì)象.span()c.獲取原字符串
匹配對(duì)象.string
print(result.group()) # 234hksj
print(result.group(1)) # 234
print(result.group(2)) # hksj
print(result.span()) # (0, 7)
print(result.span(2)) # (3, 7)
print(result.string) # 234hksj
2. fullmatch(正則表達(dá)式, 字符串) - 讓正則表達(dá)式和整個(gè)字符串進(jìn)行匹配同木;如果匹配成功返回匹配對(duì)象坪它,匹配失敗返回None
result = re.fullmatch(r'(\d{3})([a-z]{4})', '234hksj')
print(result)
3.match(正則表達(dá)式, 字符串) - 讓字符串開頭和正則表達(dá)式進(jìn)行匹配; 返回值是匹配對(duì)象或者None
print(re.match(r'\d{3}', '789佳的說(shuō)法0023-==='))
print(re.match(r'\d{3}abc', '345ABC就開始大鍋飯', flags=re.I))
4.search(正則表達(dá)式, 字符串) - 在字符串中查找第一個(gè)滿足正則表達(dá)式的子串骏庸;返回值是匹配對(duì)象或者None
print(re.search(r'\d{3}', '時(shí)代峰峻34890shh==23992課時(shí)費(fèi)'))
5.findall(正則表達(dá)式,字符串) - 獲取字符串中所有滿足正則表達(dá)式的子串涝缝;返回值是列表副砍,列表中的元素是字符串
print(re.findall(r'\d+', '安撫348凈寬度34920skdsf45燒開后09823hsd3sd89'))
6.finditer(正則表達(dá)式,字符串) - 獲取字符串中所有滿足正則表達(dá)式的子串; 返回值是迭代器,迭代器中的元素是匹配對(duì)象
result = re.finditer(r'(\d+)([a-z]{2})', '安撫348凈寬度34920skdsf45燒開后09823hsd3sd89')
print(list(result))
7.split(正則表達(dá)式,字符串) - 以正則表達(dá)式匹配到的子串作為切割點(diǎn)系冗,對(duì)字符串進(jìn)行切割; 返回值是列表空闲,列表中的元素是字符串
result = re.split(r'\d+', '暗紅色的83大黃金黃色的9罰款0233s閃電發(fā)貨890')
print(result) # ['暗紅色的', '大黃金黃色的', '罰款', 's閃電發(fā)貨', '']
8.sub(正則表達(dá)式,字符串1,字符串2) - 將字符串2中滿足正則表達(dá)式的子串全部替換成字符串1;返回值是替換后的字符串
result = re.sub(r'\d+', 'and', '暗紅色的83大黃金黃色的9罰款0233s閃電發(fā)貨890')
print(result)
9.參數(shù)flags
以上所有的函數(shù)都有一個(gè)參數(shù)flags, 可以加re.I表示匹配的時(shí)候忽略大小寫;加re.S表示單行匹配(默認(rèn)是多行匹配re.M)
多行和單行的主要區(qū)別: 多行匹配.不能和\n進(jìn)行匹配匀借;單行.可以和\n進(jìn)行匹配
print(re.fullmatch(r'a.b', 'a\nb')) # None
print(re.fullmatch(r'a.b', 'a\nb', flags=re.S))
print(re.search(r'a.+b', '世紀(jì)東方anmb\n是否b大括號(hào)'))
print(re.search(r'a.+b', '世紀(jì)東方anmb\n是否b大括號(hào)', re.S))