python之正則表達式處理函數

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']
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章