python正則表達式
用於檢查一個字符串是否與某種模式匹配的表達式。
在python中re模塊支持該功能。
先來看re模塊中正則表達式中的處理函數:
1.re.match
嘗試從字符串的起始位置匹配一個模式,如果不是起始位置匹配成功的話,match()就返回none
實例:
import re #導入re模塊
str_a = '123afs456'
pattern = '\d+'
ret = re.match(pattern, str_a, flags=re.I)
#pattern:代表要匹配的正則表達式 str_a:要匹配的字符串 flags:標誌位用於控制正則表達式的匹配方式
print(ret.group())
group:返回一個包含所有小組字符串的元組,從 1 到 所含的小組號。
groups: 匹配的整個表達式的字符串,group() 可以一次輸入多個組號,在這種情況下它將返回一個包含那些組所對應值的元組。
2.re.search方法:
掃描整個字符串並返回第一個成功的匹配。
實例:
str_a = '123afs456'
pattern = '\w+'
ret = re.search(pattern,str_a)
print(ret.group())
print(ret.span()) #獲取索引位置
運行:123afs456
(0, 9)
re.match與re.search的區別:
re.match只匹配字符串的開始,如果字符串開始不符合正則表達式,則匹配失敗,函數返回None;
而re.search匹配整個字符串,直到找到一個匹配。
實例:
line = "Cats are smarter than dogs"
matchobj = re.match(r'dogs',line) #match
if matchobj:
print(matchobj.group())
else:
print('Not match') #運行結果:Not match
matchobj = re.search(r'dogs',line) #search
if matchobj:
print(matchobj.group())
else:
print('Not match') #運行結果:dogs
3.re.sub
e.sub用於替換字符串中的匹配項
import re
a_str = '123456789,nihao'
ret = re.sub('\d+','test',a_str,count=0,flags=re.I)
第一個參數:正則中的模式字符串
第二個參數:替換的字符串,也可以爲函數
第三個參數:要被查找替換的原始字符串
第四個參數:模式匹配後替換的最大次數,默認0表示替換所有
print(ret) #運行結果:test,nihao
4.re.compile
compile 函數用於編譯正則表達式,生成一個正則表達式( Pattern )對象,供 match() 和 search() 這兩個函數使用。
# 提高匹配的效率
a_str = '13132nslvn\nVVV'
line = re.compile(r'\d+',re.I|re.S)
ret = line.match(a_str,0,5) #從'0'的位置開始匹配,正好匹配
print(ret.group()) #用於獲得一個或多個分組匹配的字符串,當要獲得整個匹配的子串時,可直接使用 group() 或 group(0);
print(ret.start()) #於獲取分組匹配的子串在整個字符串中的起始位置(子串第一個字符的索引),參數默認值爲 0
print(ret.end()) #用於獲取分組匹配的子串在整個字符串中的結束位置(子串最後一個字符的索引+1),參數默認值爲 0
print(ret.span()) #返回 (start(group), end(group))
運行結果:
13132
0
5
(0, 5)
5.findall
在字符串中找到正則表達式所匹配的所有子串,並返回一個列表,如果沒有找到匹配的,則返回空列表。
注意: match 和 search 是匹配一次 findall 匹配所有。
a_str = re.compile(r'\d+') #查找數字
ret = a_str.findall('dbfg43435d4fbdb4d53b4df') #查找所有
ret1 = a_str.findall('dbfg43435d4fbdb4d53b4df',0,6) #根據範圍
ret2 = a_str.findall('dbfg43435d4fbdb4d53b4df',0,4)
print(ret) #['43435', '4', '4', '53', '4']
print(ret1) #['43']
print(ret2) #[] 沒有匹配到返回空列表
6.finditer
和 findall 類似,在字符串中找到正則表達式所匹配的所有子串,並把它們作爲一個迭代器返回。
a_str = re.compile(r'\d+')
ret = a_str.finditer('dbfg43435d4fbdb4d53b4df')
for i in ret: #for循環遍歷
print(i.group())
7.re.split
split 方法按照能夠匹配的子串將字符串分割後返回列表
a_str = re.compile(r'\d+') #指定規則
ret = a_str.split('dbfg43435d4fbdb4d53b4df') #滿足的開始切
print(ret) #返回是一個列表['dbfg', 'd', 'fbdb', 'd', 'b', 'df']