摘要:正則表達(dá)式是一種用來(lái)匹配字符串的強(qiáng)有力的武器。正則表達(dá)式匹配如果直接給出字符,就是精確匹配。模塊提供模塊,包含所有正則表達(dá)式的功能。分組除了簡(jiǎn)單地判斷是否匹配之外,正則表達(dá)式還有提取子串的強(qiáng)大功能。
正則表達(dá)式是一種用來(lái)匹配字符串的強(qiáng)有力的武器。它的設(shè)計(jì)思想是用一種描述性的語(yǔ)言來(lái)給字符串定義一個(gè)規(guī)則,凡是符合規(guī)則的字符串,我們就認(rèn)為它“匹配”了,否則,該字符串就是不合法的。
因?yàn)檎齽t表達(dá)式也是用字符串表示的,所以,我們要首先了解如何用字符來(lái)描述字符。
正則表達(dá)式匹配:
如果直接給出字符,就是精確匹配。
d 可以匹配一個(gè)數(shù)字
w 可以匹配一個(gè)字母或數(shù)字
. 可以匹配任意字符
要匹配變長(zhǎng)的字符,在正則表達(dá)式中:
用 * 表示任意個(gè)字符(包括0個(gè))
用 + 表示至少一個(gè)字符
用 ? 表示0個(gè)或1個(gè)字符
用 {n} 表示n個(gè)字符
用 {n,m} 表示n-m個(gè)字符
特殊字符 要用""轉(zhuǎn)義
正則表達(dá)式實(shí)例:
實(shí)例1:
d{3}s+d{3,8}
d{3} 表示匹配3個(gè)數(shù)字 例如010
s 匹配一個(gè)空格或tab,s+表示至少有一個(gè)空格 例如 ‘ ’
d{3,8} 表示3-8個(gè)數(shù)字,例如‘1234567’
實(shí)例2:
‘0574-65972291’
d{4}-d{4,8}
w
正則表達(dá)式進(jìn)階:
要做更精確地匹配,可以用 [ ] 表示范圍
A|B 可以匹配A或B,所以(P|p)ython可以匹配"Python"或者"python"
^表示行的開(kāi)頭,^d表示必須以數(shù)字開(kāi)頭,$表示行的結(jié)束,d$表示必須以數(shù)字結(jié)束。
re模塊
Python提供re模塊,包含所有正則表達(dá)式的功能。由于Python的字符串本身也用 轉(zhuǎn)義,因此使用Python的r前綴,就不用考慮轉(zhuǎn)義的問(wèn)題了。
例如: s = r " ABC-001 "
案例:
match( )方法 判斷是否匹配,如果匹配成功,返回Match對(duì)象,否則返回None。
正則切分字符串
用正則表達(dá)式切分字符串比用固定的字符更靈活,請(qǐng)看正常的切分代碼
"a b c".split(" ")
["a", "b", "", "", "c"]
re.split(r"s+","a b c")
["a","b","c"]
如果用戶輸入了一組標(biāo)簽,下次記得用正則表達(dá)式來(lái)把不規(guī)范的輸入轉(zhuǎn)化成正確的數(shù)組。
分組
除了簡(jiǎn)單地判斷是否匹配之外,正則表達(dá)式還有提取子串的強(qiáng)大功能。用 ( ) 表示的就是要提取的分組(Group)
貪婪匹配
正則匹配默認(rèn)是貪婪匹配,也就是匹配盡可能多的字符。
由于d+采用貪婪匹配,直接把后面的0全部匹配了,結(jié)果0*只能匹配空字符串了。
必須讓d+采用非貪婪匹配(也就是盡可能少匹配),才能把后面的0匹配出來(lái),加個(gè)?就可以讓d+采用非貪婪匹配:
編譯
當(dāng)我們?cè)赑ython中使用正則表達(dá)式時(shí),re模塊內(nèi)部會(huì)干兩件事情:
編譯正則表達(dá)式,如果正則表達(dá)式的字符串本身不合法,會(huì)報(bào)錯(cuò);
用編譯后的正則表達(dá)式去匹配字符串。
如果一個(gè)正則表達(dá)式要重復(fù)使用幾千次,出于效率的考慮,我們可以預(yù)編譯該正則表達(dá)式,接下來(lái)重復(fù)使用時(shí)就不需要編譯這個(gè)步驟了,直接匹配:
編譯后生成Regular Expression對(duì)象,由于該對(duì)象自己包含了正則表達(dá)式,所以調(diào)用對(duì)應(yīng)的方法時(shí)不用給出正則字符串。
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/40682.html
摘要:正則表達(dá)式關(guān)閉或可選標(biāo)志。如果所含正則表達(dá)式,以表示,在當(dāng)前位置成功匹配時(shí)成功,否則失敗。否則指的是八進(jìn)制字符碼的表達(dá)式。 正則表達(dá)式是個(gè)很牛逼的東西,不管是在javascript,還是在Python web開(kāi)發(fā)(http://www.maiziedu.com/course/python-px...)中,我們都會(huì)遇到正則表達(dá)式,雖然javascript和Python的正則表達(dá)式區(qū)別不大...
摘要:反斜杠的困擾與大多數(shù)編程語(yǔ)言相同,正則表達(dá)式里使用作為轉(zhuǎn)義字符,這就可能造成反斜杠困擾。文本中正則表達(dá)式結(jié)束搜索的索引。以元組形式返回全部分組截獲的字符串。用于指定最大分割次數(shù),不指定將全部分割。 1. 正則表達(dá)式基礎(chǔ) 1.1. 簡(jiǎn)單介紹 正則表達(dá)式并不是Python的一部分。正則表達(dá)式是用于處理字符串的強(qiáng)大工具,擁有自己獨(dú)特的語(yǔ)法以及一個(gè)獨(dú)立的處理引擎,效率上可能不如str自帶的方法...
摘要:今天來(lái)給大家分享一份關(guān)于比較詳細(xì)的正則表達(dá)式寶典,學(xué)會(huì)之后你將對(duì)正則表達(dá)式達(dá)到精通的狀態(tài)。正則表達(dá)式是用在方法當(dāng)中,大多數(shù)的字符串檢索都可以通過(guò)來(lái)完成。導(dǎo)入模塊在使用正則表達(dá)式之前,需要導(dǎo)入模塊。 ...
摘要:今天就專門看看正則表達(dá)式。下面是一個(gè)正則表達(dá)式最簡(jiǎn)單的使用例子。這個(gè)例子使用了正則表達(dá)式模塊的函數(shù),它會(huì)返回所有符合模式的列表。查詢標(biāo)志讓正則表達(dá)式具有不同的行為。,按給定正則表達(dá)式分割字符串。,正則表達(dá)式中捕獲組的數(shù)量。 最近研究Python爬蟲(chóng),很多地方用到了正則表達(dá)式,但是沒(méi)好好研究,每次都得現(xiàn)查文檔。今天就專門看看Python正則表達(dá)式。本文參考了官方文檔 re模塊。 模式 首...
摘要:正則表達(dá)式語(yǔ)法字符與字符類特殊字符以上特殊字符要想使用字面值,必須使用進(jìn)行轉(zhuǎn)義字符類包含在中的一個(gè)或者多個(gè)字符被稱為字符類,字符類在匹配時(shí)如果沒(méi)有指定量詞則只會(huì)匹配其中的一個(gè)。 1. 正則表達(dá)式語(yǔ)法 1.1 字符與字符類 1 特殊字符:.^$?+*{}| 以上特殊字符要想使用字面值,必須使用進(jìn)行轉(zhuǎn)義 2 字符類 1. 包含在[]中的一個(gè)或者多個(gè)字符被稱為字符類,字符類在匹配時(shí)如果沒(méi)有指...
閱讀 2035·2021-11-22 19:20
閱讀 2675·2021-11-22 13:54
閱讀 2040·2021-09-04 16:40
閱讀 1861·2021-08-13 11:54
閱讀 2730·2019-08-30 15:55
閱讀 3493·2019-08-29 13:51
閱讀 553·2019-08-29 11:09
閱讀 3034·2019-08-26 14:06