re.compile(pattern[, flags])4. 匹配的方式
正則表達(dá)式匹配的方式主要有3種match, search和findall 。如果你懂英語(yǔ)的話,就知道它們的區(qū)別,這里前兩個(gè)都是單一匹配,只會(huì)匹配一個(gè)流程,如果有多個(gè)符合匹配規(guī)則的,它們只會(huì)返回第一個(gè)結(jié)果,而findall會(huì)把所有符合候選的都匹配出來(lái) 。而前兩個(gè)的區(qū)別就是match必須是開(kāi)頭就要能夠匹配,也就是和startwith差不多的效果,而search則可以在任意位置進(jìn)行匹配 。
下面看一下三個(gè)方法的參數(shù)表示,其中pattern為我們制定的正則表達(dá)式,string為我們要匹配的字符串,flags表示匹配模式:
re.match(pattern, string, flags=0)re.search(pattern, string, flags=0)findall(string[, pos[, endpos]])因此我們選擇方式時(shí)有以下幾個(gè)步驟:
是否需要匹配多個(gè)?是,選擇findall
是否需要從頭匹配?是,選擇match
一般情況使用search
5. 匹配結(jié)果展示
匹配結(jié)果展示主要有以下四個(gè)部分組成:
group([group1, …]) 方法用于獲得一個(gè)或多個(gè)分組匹配的字符串,當(dāng)要獲得整個(gè)匹配的子串時(shí),可直接使用 group() 或 group(0);start([group]) 方法用于獲取分組匹配的子串在整個(gè)字符串中的起始位置(子串第一個(gè)字符的索引),參數(shù)默認(rèn)值為 0;end([group]) 方法用于獲取分組匹配的子串在整個(gè)字符串中的結(jié)束位置(子串最后一個(gè)字符的索引+1),參數(shù)默認(rèn)值為 0;span([group]) 方法返回 (start(group), end(group)) 。例如下面這個(gè)例子,主要表現(xiàn)了我們?nèi)绾握{(diào)用這四個(gè)部分 。>>>import re>>> pattern = re.compile(r'd+')# 用于匹配至少一個(gè)數(shù)字>>> m = pattern.match('one12twothree34four')# 查找頭部,沒(méi)有匹配>>> print mNone>>> m = pattern.match('one12twothree34four', 2, 10) # 從'e'的位置開(kāi)始匹配,沒(méi)有匹配>>> print mNone>>> m = pattern.match('one12twothree34four', 3, 10) # 從'1'的位置開(kāi)始匹配,正好匹配>>> print m# 返回一個(gè) Match 對(duì)象<_sre.SRE_Match object at 0x10a42aac0>>>> m.group(0)# 可省略 0'12'>>> m.start(0)# 可省略 03>>> m.end(0)# 可省略 05>>> m.span(0)# 可省略 0(3, 5)6. 舉一個(gè)簡(jiǎn)單的例子
一個(gè)更好的,更直觀易懂的方法是如下這個(gè)例子,相比較剛才使用數(shù)字索引,它將每一個(gè)匹配內(nèi)容語(yǔ)義化,使得代碼更加容易理解 。contactInfo = '( Nucleus (span 2 3) (rel2par span)'pattern=re.compile(r'(?P<nuclearity>w+) (span (?P<start>w+) (?P<end>w+)) (rel2par (?P<relation>w+))')match = pattern.search(contactInfo)print(match.group())# Nucleus (span 2 3) (rel2par span)print(match.group("nuclearity"))# Nucleus print(match.group("start"))# 2print(match.group("end"))# 3print(match.group("relation"))# span從上述的例子中我們就可以獲得最直觀的結(jié)果,我們只需要將這些結(jié)果存入到我們需要的數(shù)據(jù)結(jié)構(gòu)中即可 。
7. 其他一些補(bǔ)充知識(shí)
7.1 匹配常用的一些格式
如果我們只需要匹配一些常用的格式,如姓名、身份證、郵箱、電話號(hào)碼等,都是有現(xiàn)成的工具直接生成,不需要我們進(jìn)行再次編寫(xiě) 。
7.2 匹配中文字符
如果你只是想匹配若干個(gè)中文漢字,使用下面的正則表達(dá)式:
[u4E00-u9FA5\s]+ 多個(gè)漢字,包括空格[u4E00-u9FA5]+ 多個(gè)漢字,不包括空格[u4E00-u9FA5] 一個(gè)漢字這里還有匹配更全的中文字的方法 。
提到用正則表達(dá)式匹配漢字,很容易搜到這個(gè)[u4e00-u9fa5],但是它不算全面,不包含一些生僻漢字 。
本文對(duì)此問(wèn)題做一個(gè)梳理 。
以下是比較全面的漢字Unicode分布,參考Unicode 10.0標(biāo)準(zhǔn)(2017年6月發(fā)布):
以上關(guān)于本文的內(nèi)容,僅作參考!溫馨提示:如遇健康、疾病相關(guān)的問(wèn)題,請(qǐng)您及時(shí)就醫(yī)或請(qǐng)專業(yè)人士給予相關(guān)指導(dǎo)!
「愛(ài)刨根生活網(wǎng)」www.malaban59.cn小編還為您精選了以下內(nèi)容,希望對(duì)您有所幫助:- Python編程從入門到實(shí)踐 python高性能編程怎么樣
- python命令行運(yùn)行py文件 python運(yùn)行文件指令
- python入門教程 爬蟲(chóng)和python什么關(guān)系和區(qū)別
- python語(yǔ)言基礎(chǔ)知識(shí) python零基礎(chǔ)教程
- python退出程序代碼大全 python停止程序運(yùn)行快捷鍵
- 學(xué)python需要的基礎(chǔ)知識(shí) python教學(xué)設(shè)計(jì)
- 數(shù)據(jù)分析用python還是bi powerbi使用教程
- python貪吃蛇最簡(jiǎn)單代碼 python的idle怎么用
- python四則運(yùn)算器編寫(xiě) idea安裝python插件配置
- linux搭建python環(huán)境 linux下安裝python模塊
