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