摘要:續(xù)上基礎(chǔ)通俗三類常用的的簡(jiǎn)寫形式偷懶需要用來對(duì)某一類特定字符進(jìn)行匹配,通常,我們用的最多的字符就是下面的三類數(shù)字,字母和這類看不到占位符,上一部分學(xué)過通過方括號(hào)表示這三類的的方法由于上面的表達(dá)試比較長(zhǎng),所以需要有一種更簡(jiǎn)單的寫法可以
續(xù)上:[Regular Expression]Mastering Python Regular Expression基礎(chǔ)通俗(1) 三類常用的metacharacters的簡(jiǎn)寫形式(偷懶需要)
#metacharacters用來對(duì)某一類特定字符進(jìn)行匹配,通常,我們用的最多的字符就是下面的三類 #數(shù)字,字母 和 space 這類看不到占位符,上一部分學(xué)過通過方括號(hào)表示這三類的metacharacters的方法 [0-9],[a-zA-Z],[ vf] #由于上面的表達(dá)試比較長(zhǎng),所以需要有一種更簡(jiǎn)單的寫法: [0-9] 可以寫成d [a-zA-Z0-9_] 可以寫成w [ vf] 可以寫成s 對(duì)上面metacharacters取反的寫法分別為 D ,W,S (全部大寫即可)點(diǎn)(dot)字符的使用
點(diǎn)這個(gè)字符作為一最常用的metacharacter,可以匹配任何一個(gè)字符,但是不對(duì)newline(換行)進(jìn)行匹配
舉例: g/.../p #這個(gè)正則會(huì)匹配三個(gè)任意字符,但是字符不能為newline 過度使用dot字符,會(huì)給閱讀帶來困難,寫正則時(shí),應(yīng)試盡量做到精確匹配 如需要匹配的字符確定是數(shù)字,就使用"d",而不要選擇使用"."win and 類unix系統(tǒng)中路徑分割符的匹配
先看例子: g/[^/]/p 講解: ^ :這個(gè)符號(hào)是取反情況的意思 / :對(duì) /這個(gè)符號(hào)進(jìn)行匹配,(因?yàn)?這個(gè)/符號(hào)本身是需要轉(zhuǎn)義) :對(duì) 進(jìn)行匹配, 所以上面的正則表達(dá)式的意思是:只要不是 / 和 字符,其它的字符都會(huì)匹配 在windows系統(tǒng)下路徑分割符為: 在類unix系統(tǒng)下路徑分割符為:/“或”符號(hào)(alternatation)的使用方法
想像一下,我們需要把輸入文本中“be smart”和"be stupid" 匹配出來,應(yīng)該怎么寫正則呢? 這時(shí)應(yīng)該使用或符號(hào) | 來完成這樣的工作: g/be (smart|stupid)/p #注意還使用了圓括號(hào)哦! g/yes|no|maybe/p #這時(shí)會(huì)對(duì)yes,no,maybe三個(gè)單詞中的任何一個(gè)進(jìn)行匹配 多個(gè)|符號(hào)的連用數(shù)量限定符(quantifiers)的使用方法
先記住數(shù)量限定符,使用這四個(gè)符號(hào):? * + {n,m} 他們的意思分別是: ? : 該符號(hào)前面的字符可以出現(xiàn)0個(gè)或1個(gè) * : 該符號(hào)前面的字符可以出來0個(gè)或多個(gè) + : 該符號(hào)前面的字符可以出現(xiàn)1個(gè)或多個(gè) {n,m}:該符號(hào)前面的字符,最小出現(xiàn)n個(gè),最多出現(xiàn)m個(gè) 舉例說明就懂了: 來個(gè)簡(jiǎn)單的: g/carS?/p # 由于?數(shù)量限定符,表示前面的字符可以出來0次,或1次,那個(gè)這個(gè)正則就是在對(duì)car 和 carS進(jìn)行匹配 來個(gè)復(fù)雜一點(diǎn)的: 如果我們需要對(duì)555-555-555 和 555 555 555和 555555555 進(jìn)行正則匹配 進(jìn)行正則匹配的意思就是說,我們寫的一個(gè)正則表達(dá)式,可以把上面三種情況都包含在內(nèi): 實(shí)現(xiàn)如下: g/d+[-s]?d+[-s]?d+/p 解析: d是對(duì)數(shù)字進(jìn)行匹配, +號(hào)表示前面的數(shù)字可以有1個(gè)或多個(gè), [-s]表示-或space的二個(gè)選一個(gè)字符的匹配, ?表示前面的字符可以出現(xiàn)0次或1次 由于上面的數(shù)字個(gè)數(shù)是確定的,我們也可以用精確的數(shù)字來進(jìn)行匹配,如下: g/d{3}[-s]?d{3}[-s]?d{3}/p 上面的{3} 表示前面的字符(這里是d)只能出現(xiàn)三次 對(duì){n,m}進(jìn)行更多的說明: {,m}:前面的字符可出現(xiàn)0到m次 {n,}:前面的字符可以出現(xiàn)n到無窮次 由此可知:? * +可以使用{n,m}來表示,只是? * +這樣寫更省事 ? 等價(jià)于 {0,1} * 等價(jià)于 {0,} + 等價(jià)于 {1,}數(shù)量限定的符的兩種工作模式 :
通過例子來說明這兩種工作模式: 如果我們使用g/".+"/p 正則對(duì)下面這句話進(jìn)行匹配,會(huì)得到什么結(jié)果? English "hello" ,Spanish "hola" 很顯然,可能會(huì)出現(xiàn)兩種情況: 情況1: 匹配到結(jié)果為: "hello" 情況2: 匹配到結(jié)果為: "hello" ,Spanish "hola" 上面兩種情況就對(duì)應(yīng)了數(shù)量限定符 +,的工作模式 上面的情況2,我們稱為Greedy模式 (貪婪模式 ) 上面的情況1,我們稱為Reluctant模式 (勉強(qiáng)夠模式) python中模式使用的是Greedy模式,如果我們想要使用Reluctant模式,也很容易,只需要在+后面加一個(gè)?即可 如下: g/".+?"/p #在數(shù)量限定符+后面添加了?,這時(shí)就會(huì)使用Reluctant模式 所以在Python中,當(dāng)你看到有兩個(gè)數(shù)量限定符時(shí),并且第二個(gè)限定符為?時(shí),你需要馬上知道第二個(gè)數(shù)量限定符的作用是 表示使用Reluctant模式對(duì)邊界進(jìn)行匹配的metacharacters
思考:對(duì)于一個(gè)輸入文件,我們有什么邊界: 1:文本的開頭,和文本的結(jié)束 2:在文本中行的開頭,行的結(jié)束 3:?jiǎn)卧~的邊界,(非單詞的邊界) 對(duì)于行的開頭和結(jié)束,使用^ 和 $進(jìn)行匹配 對(duì)于文件的開關(guān)和結(jié)束,使用 A 和進(jìn)行匹配 對(duì)于單詞的邊界使用,進(jìn)行匹配,(非單詞的邊界使用B進(jìn)行匹配) 舉例說明: g/^name:/p #對(duì)文件中 所有行的開始,內(nèi)容為name: 的行進(jìn)行匹配 下面的 1,3,4行就滿足正則匹配的結(jié)果 下面為進(jìn)行匹配的文本 name:Tom abc name:Jim name: xxname:abc 來個(gè)復(fù)雜一點(diǎn)的例子: g/^name:[sa-zA-z]+$/p 解釋: 看到正則表達(dá)式前面后^ $, 就知道行首行尾的內(nèi)容都要滿足要求 以name:開頭的行,然后 后面可以接空格或大小寫字母, + 代表前面的字符至少要出現(xiàn)1次 最后一個(gè)例子(下面兩個(gè)比較一下): g/hello/p #這個(gè)正則會(huì)把hello ,helloxxx,xxhello, xxhelloxx 都匹配出來 g/hello/p #這個(gè)正則只會(huì)把多帶帶的 hello 這個(gè)單詞匹配出來第一章總結(jié):
正則表達(dá)式中的主要內(nèi)容:literal and metacharacters 三個(gè)括號(hào)的使用: ()與 |搭配使用 [] 單個(gè)字符的集合,如[0-9a-z] {} 屬于數(shù)量限定符{m,n} 學(xué)習(xí)了數(shù)量限定符: ? * + {} 學(xué)習(xí)了邊界匹配符: ^ $ A B 學(xué)習(xí)了常用字符集合的表達(dá)方式 [0-9],[0-9a-zA-Z],[ s fv] ,取反[^ 學(xué)習(xí)了三類字符的簡(jiǎn)寫式:/s, /d, /w 取反 /S ,/D, /W 點(diǎn)字符 匹配除newline以外的所有單個(gè)字符 注意:上面基礎(chǔ)內(nèi)容,需要經(jīng)常回顧!!容易遺忘后面進(jìn)入Python實(shí)戰(zhàn)部分:re module的使用
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://m.specialneedsforspecialkids.com/yun/37917.html
摘要:續(xù)上基礎(chǔ)通俗正則表達(dá)中兩個(gè)重要對(duì)象如下圖使用函數(shù),返回為對(duì)象使用函數(shù),如果到存在的結(jié)果,則返回對(duì)象,否則返回福利一個(gè)在線驗(yàn)證自己寫的正則表達(dá)式是否正確的網(wǎng)站關(guān)于正則表達(dá)式中的如下圖中的前加入字母表明里面的表達(dá)式已經(jīng)是而前面加了,表明,在做之 續(xù)上:[Regular Expression]Mastering Python Regular Expression基礎(chǔ)通俗(2) 1:Pyth...
摘要:兼容的正則表達(dá)式已經(jīng)實(shí)現(xiàn)了很多使用不同解析引擎的正則函數(shù)。中主要有兩個(gè)正則解析器一個(gè)稱為,另一個(gè)稱為兼容正則表達(dá)式。在中,每個(gè)正則表達(dá)式模式都是使用符合格式的字符串。 原文鏈接: Getting Started with PHP Regular Expressions Last-Modified: 2019年5月10日16:23:19譯者注: 本文是面向0正則基礎(chǔ)的phper, 很多...
摘要:瞎乎出品瞎乎第二期正則表達(dá)式之瑞士軍刀正則表達(dá)式,這是一塊硬骨頭,很難啃,但是啃著又很香。正則表達(dá)式使用單個(gè)字符串來描述匹配一系列匹配某個(gè)句法規(guī)則的字符串。 瞎乎 出品瞎乎第二期:正則表達(dá)式之瑞士軍刀 正則表達(dá)式(Regular Expression),這是一塊硬骨頭,很難啃,但是啃著又很香。 正則表達(dá)式使用單個(gè)字符串來描述、匹配一系列匹配某個(gè)句法規(guī)則的字符串。很多地方我們都需要使用正...
摘要:函數(shù)匹配能力介于簡(jiǎn)單的字符串方法和強(qiáng)大的正則表達(dá)式之間,如果在數(shù)據(jù)處理操作中只需要簡(jiǎn)單的通配符就能完成的時(shí)候,這通常是一個(gè)比較合理的方案。此模塊的主要作用是文件名稱的匹配,并且匹配的模式使用的風(fēng)格。 fnmatch()函數(shù)匹配能力介于簡(jiǎn)單的字符串方法和強(qiáng)大的正則表達(dá)式之間,如果在數(shù)據(jù)處理操作中只需要簡(jiǎn)單的通配符就能完成的時(shí)候,這通常是一個(gè)比較合理的方案。此模塊的主要作用是文件名稱的匹配...
閱讀 1106·2021-10-14 09:43
閱讀 1154·2021-10-11 11:07
閱讀 3117·2021-08-18 10:23
閱讀 1492·2019-08-29 16:18
閱讀 1007·2019-08-28 18:21
閱讀 1479·2019-08-26 12:12
閱讀 3766·2019-08-26 10:11
閱讀 2507·2019-08-23 18:04