站長(zhǎng)在線Python精講:在Python中匹配字符串的3個(gè)方法詳解
導(dǎo)讀:歡迎你來(lái)到站長(zhǎng)在線的站長(zhǎng)學(xué)堂學(xué)習(xí)Python知識(shí),本文學(xué)習(xí)的是《在Python中匹配字符串的3個(gè)方法詳解》。本知識(shí)點(diǎn)主要內(nèi)容有:使用match()方法進(jìn)行匹配、使用search()方法進(jìn)行匹配、使用findall()方法進(jìn)行匹配。
永久美國(guó)免備案虛擬主機(jī)1元1天,15元1月,100元1年,1000元永久
站長(zhǎng)在線旗下答案網(wǎng)站,全站所有題目,免費(fèi)查看答案和答案解析
歡迎你來(lái)到站長(zhǎng)在線的站長(zhǎng)學(xué)堂學(xué)習(xí)python知識(shí),本文學(xué)習(xí)的是《在Python中匹配字符串的3個(gè)方法詳解》。本知識(shí)點(diǎn)主要內(nèi)容有:使用match()方法進(jìn)行匹配、使用search()方法進(jìn)行匹配、使用findall()方法進(jìn)行匹配。
匹配字符串可以使用re模塊提供的match()、search()和findall()等方法。下面分別進(jìn)行介紹。
1、使用match()方法進(jìn)行匹配
match()方法用于從字符串的開(kāi)始處進(jìn)行匹配,如果在起始位置匹配成功,則返回Match對(duì)象,否則返回None。其語(yǔ)法格式如下:
re.match(pattern, string, [flags])
其中,相關(guān)參數(shù)說(shuō)明如下:
pattern:表示模式字符串,由要匹配的正則表達(dá)式轉(zhuǎn)換而來(lái)。
string:表示要匹配的字符串。
flags:可選參數(shù),表示標(biāo)志位,用于控制匹配方式,如是否區(qū)分字母大小寫(xiě)。
常用的標(biāo)志位及其說(shuō)明:
re.A或ASCII 對(duì)于\w、\w、\b、\B、\d、\B、\d、\D、]s、\S進(jìn)行ASCII匹配(僅適用于Python3)
re.I或IGNORECASE 使匹配對(duì)大小寫(xiě)不敏感
re.L 做本地化識(shí)別(locale-aware)匹配
re.M或MULTILINE 多行匹配,影響 ^ 和 $
re.S或DOTALL 使 . 匹配包括換行在內(nèi)的所有字符
re.U或UNicoDE 根據(jù)Unicode字符集解析字符。這個(gè)標(biāo)志影響 \w, \W, \b, \B.
re.X或VERBOSE 該標(biāo)志通過(guò)給予你更靈活的格式以便你將正則表達(dá)式寫(xiě)得更易于理解。
例如,匹配字符串是否以“zz_”開(kāi)頭,不區(qū)分字母大小寫(xiě),代碼如下:
import re
pattern = r'zz_\w+' # 模式字符串
string = 'ZZ_MALL zz_mall' # 要匹配的字符串
match = re.match(pattern,string,re.I) # 匹配字符串,不區(qū)分大小寫(xiě)
print(match) # 輸出匹配結(jié)果
string = '項(xiàng)目名稱 ZZ_MALL zz_mall' # 要匹配的字符串
match = re.match(pattern,string,re.I) # 匹配字符串,不區(qū)分大小寫(xiě)
print(match) # 輸出匹配結(jié)果
運(yùn)行結(jié)果如下:
<re.Match object; span=(0, 7), match='ZZ_MALL'>
None
>>>
從上面的執(zhí)行結(jié)果中可以看出,字符串“ZZ_MALL”是以“zz_”開(kāi)頭,所以返回一個(gè)Match對(duì)象,而字符串“項(xiàng)目名稱 ZZ_MALL zz_mall”不是以“zz_”開(kāi)頭,所以返回None。這是因?yàn)閙atch()方法從字符串的開(kāi)始位置開(kāi)始匹配,當(dāng)?shù)谝粋€(gè)字母不符合條件時(shí),則不再進(jìn)行匹配,直接返回None。
Match對(duì)象中包含了匹配值的位置和匹配數(shù)據(jù)。其中,要獲取匹配值的起始位置可以使用Match對(duì)象的start()方法;要獲取匹配值的結(jié)束位置可以使用end()方法;通過(guò)span()方法可以返回匹配位置的元組;通過(guò)string屬性可以獲取要匹配的字符串。例如下面的代碼:
import re
pattern = r'zz_\w+' # 模式字符串
string = 'ZZ_MALL zz_mall' # 要匹配的字符串
match = re.match(pattern,string,re.I) # 匹配字符串,不區(qū)分大小寫(xiě)
print('匹配值的起始位置: ',match.start())
print('匹配值的結(jié)束位置: ',match.end())
print('匹配位置的元組: ',match.span())
print('要匹配的字符串: ',match.string)
print('匹配數(shù)據(jù): ',match.group())
運(yùn)行結(jié)果如下:
匹配值的起始位置: 0
匹配值的結(jié)束位置: 7
匹配位置的元組: (0, 7)
要匹配的字符串: ZZ_MALL zz_mall
匹配數(shù)據(jù): ZZ_MALL
>>>
下面實(shí)例,講解一個(gè)判定的手機(jī)號(hào)碼是不是有效的中國(guó)移動(dòng)的號(hào)碼。
import re # 導(dǎo)入Python的re模塊
pattern = r'(13[4-9]\d{8})|(15[01289]\d{8})$'
mobile = '13800000000'
match = re.match(pattern,mobile) # 進(jìn)行模式匹配
if match == None: # 判斷是否為None,為真表示匹配失敗
print(mobile,'不是有效的中國(guó)移動(dòng)手機(jī)號(hào)碼。')
else:
print(mobile,'是有效的中國(guó)移動(dòng)手機(jī)號(hào)碼。')
mobile = '13100000000'
match = re.match(pattern,mobile) # 進(jìn)行模式匹配
if match == None: # 判斷是否為None,為真表示匹配失敗
print(mobile,'不是有效的中國(guó)移動(dòng)手機(jī)號(hào)碼。')
else:
print(mobile,'是有效的中國(guó)移動(dòng)手機(jī)號(hào)碼。')
運(yùn)行結(jié)果如下:
13800000000 是有效的中國(guó)移動(dòng)手機(jī)號(hào)碼。
13100000000 不是有效的中國(guó)移動(dòng)手機(jī)號(hào)碼。
>>>
2、使用search()方法進(jìn)行匹配
search()方法用于在整個(gè)字符串中搜索第一個(gè)匹配的值,如果在起始位置匹配成功,則返回Match對(duì)象,否則返回None。其語(yǔ)法格式如下:
re.search(pattern, string, [flags])
其中,相關(guān)參數(shù)說(shuō)明如下:
pattern:表示模式字符串,由要匹配的正則表達(dá)式轉(zhuǎn)換而來(lái)。
string:表示要匹配的字符串。
flags:可選參數(shù),表示標(biāo)志位,用于控制匹配方式,如是否區(qū)分字母大小寫(xiě)。常用的標(biāo)志前面說(shuō)了。
例如,搜索第一個(gè)以“zz_”開(kāi)頭的字符串,不區(qū)分字母大小寫(xiě),代碼如下:
import re
pattern = r'zz_\w+' # 模式字符串
string = 'ZZ_MALL zz_mall' # 要匹配的字符串
match = re.search(pattern,string,re.I) # 匹配字符串,不區(qū)分大小寫(xiě)
print(match) # 輸出匹配結(jié)果
string = '項(xiàng)目名稱 ZZ_MALL zz_mall' # 要匹配的字符串
match = re.search(pattern,string,re.I) # 匹配字符串,不區(qū)分大小寫(xiě)
print(match) # 輸出匹配結(jié)果
運(yùn)行結(jié)果如下:
<re.Match object; span=(0, 7), match='ZZ_MALL'>
<re.Match object; span=(5, 12), match='ZZ_MALL'>
>>>
3、使用findall()方法進(jìn)行匹配
findall()方法用于在整個(gè)字符串中搜索所有符合正則表達(dá)式的字符串,并以列表的形式返回。如果匹配成功,則返回包含匹配結(jié)構(gòu)的列表,否則返回空列表。其語(yǔ)法格式如下:
re.findall(pattern, string, [flags])
其中,相關(guān)參數(shù)說(shuō)明如下:
pattern:表示模式字符串,由要匹配的正則表達(dá)式轉(zhuǎn)換而來(lái)。
string:表示要匹配的字符串。
flags:可選參數(shù),表示標(biāo)志位,用于控制匹配方式,如是否區(qū)分字母大小寫(xiě)。常用的標(biāo)志上面有了。
例如,搜索以“zz_”開(kāi)頭的字符串,不區(qū)分字母大小寫(xiě),代碼如下:
import re
pattern = r'zz_\w+' # 模式字符串
string = 'ZZ_MALL zz_mall' # 要匹配的字符串
match = re.findall(pattern,string,re.I)# 匹配字符串,不區(qū)分大小寫(xiě)
print(match) # 輸出匹配結(jié)果
string = '項(xiàng)目名稱 ZZ_MALL zz_mall' # 要匹配的字符串
match = re.findall(pattern,string) # 匹配字符串,區(qū)分大小寫(xiě)
print(match) # 輸出匹配結(jié)果
運(yùn)行結(jié)果為:
['ZZ_MALL', 'zz_mall']
['zz_mall']
>>>
上方下面這個(gè)結(jié)果只有一個(gè),因?yàn)槲沂褂昧四J(rèn)的設(shè)置,進(jìn)行區(qū)分大小寫(xiě)了。
到此為止,本文學(xué)習(xí)的是《在Python中匹配字符串的3個(gè)方法詳解》。本知識(shí)點(diǎn)主要內(nèi)容有:使用match()方法進(jìn)行匹配、使用search()方法進(jìn)行匹配、使用findall()方法進(jìn)行匹配。就講解完畢了,有問(wèn)題可以給我留言哦!
下一個(gè)知識(shí)點(diǎn),我們講解《在Python中替換字符串詳解》。歡迎你對(duì)站長(zhǎng)在線進(jìn)行關(guān)注,評(píng)論,點(diǎn)贊,分享、轉(zhuǎn)發(fā)!
本文地址:http://003188.cn/pythonpipeizifuchuandesangefangfa.html
阿里云虛擬主機(jī)1G空間,120元一年
香港、美國(guó)虛擬主機(jī)100元一年,1000元永久
騰訊云雙十一0.4折起,2核8G5M三年僅700元,2核4G8M三年僅198元
猜你喜歡