python核心程式設計筆記——正則表示式(一)
文章目錄
特殊符號和字元
. 即所謂的“元字元”,這些字元給予正則表示式強大的功能和靈活性。以下是常見的符號和字元:
使用擇一匹配符號匹配多個正則表示式模式
. 表示擇一匹配的符號是“|”,表示從多個模式中選一種的操作,用於分割不同的正則表示式。例如:正則表示式模式為:at|home,它匹配的字串at或者home。
匹配任意單個字元
. 點號“.”用來匹配除了換行符\n以外的任何字元,無論字母、數字、空格、可列印字元、不可列印字元,還是一個符號,使用“.”都能匹配。例如:正則表示式模式為:f.o,可匹配的字元可以是:foo,f9o,f*o等。
值得一提的是如何匹配點號本身呢?需要使用轉義:“\.”。
從字串起始或結尾或單詞邊界匹配
. 字元“^”或者特殊字元“\A”表示匹配以某單詞為起始的字串,字元“$”或者特殊字元“\Z”表示匹配以某單詞作為結尾的字串,例如:
正則表示式模式 | 匹配的字串 |
---|---|
^From | 任何以From作為起始的字串 |
From$ | 任何以From作為結尾的字串 |
. 特殊字元“\b”和“\B”可以用來匹配字元邊界。兩者的區別在於前者用於指定這個單詞是作為字串開頭或結尾,後者只需要字串包含指定的單詞就行,例如:
正則表示式模式 | 匹配的字串 |
---|---|
\bthe | 任何以the開始的字串 |
\bthe\b | 僅僅匹配the |
\Bthe | 任何包含the但不以the作為起始的字串 |
建立字符集([])
. 有時希望匹配某些特定的字串,就像是將匹配的範圍進行更精確的縮小了,通過“[]”來做到這點:
正則表示式模式 | 匹配的字串 |
---|---|
b[aeiu]t | bat、bet、bit、but |
[ae][23][dp] | 一個包含三個字元的字串,第一個字元可能是a或e,第二個可能是2或3,第三個可能是d或p |
限定範圍與否定
. 除了單字元外,還可以匹配指定的字元範圍,在方括號中通過“-”來實現操作,另外,如果左方括號後跟的是“^”,則表示不匹配括號中給定的字元,例如:
正則表示式模式 | 匹配的字串 |
---|---|
b[0-5] | b0、b1、b2、b3、b4、b5 |
[^aeiou] | 匹配非母音字元 |
使用閉包操作符實現存在性和頻數匹配(*+?)
. 星號操作符“*”將用來匹配其左邊的正則表示式出現零次或多次的情況(在計算機程式語言和編譯原理中,該操作被稱為Kleene閉包)。加號操作符“+”將匹配一次或多次出現的正則表示式(也叫做正閉包操作符)。問號操作符“?”將匹配出現一次或零次的正則表示式。
還有大括號操作符“{}”,中是一個或用逗號隔開的兩個數值,表示前面的正則表示式出現的次數或出現的次數範圍。
值得注意的是如果問號操作符緊跟在任何使用閉合操作符的匹配後面,它將盡可能要求正則表示式引擎匹配儘可能少的次數。
正則表示式模式 | 匹配的字串 |
---|---|
[dn]ot? | 表示t出現一次或零次,可能匹配do、no、dot、not |
[0-9]{15,,17} | 匹配15到17個數字 |
</?[^>]+> | 匹配全部有效的(和無效的)HTML標籤 |
表示字符集的特殊字元
. 與使用“0-9”這種形式相比較,可以簡單的使用“d”表示匹配任何十進位制數字。另一個特殊字元“\w”能夠表示全部字母數字的字符集,相當於[A-Za-z0-9],“\s”可以用來表示空格字元,這些特殊字元的大寫版本表示不匹配。例如:
正則表示式模式 | 匹配的字串 |
---|---|
\w+-\d+ | 字串和連字元和數字,例如:asda-1234 |
[A-Za-z]\w* | 第一個字元是字母,其餘字元(如果存在)是字母或數字 |
\[email protected]\w+.com | 簡單的電子郵件地址 |
使用圓括號指定分組
. 當時用正則表示式時,一對圓括號可以實現以下任意一個(或者兩個)功能:
1.對正則表示式進行分組;
2.匹配子組。
分組的一個原因是可能我想對整個表示式使用重複操作符(*+?)而不是單個字元;另一個原因很好的例項是:當有兩個不同的正則表示式而且想用他們來比較同一個字串時(這個原因沒懂)。
匹配子組的作用很大,比如之前所寫的:\w+-\d+這個匹配模式,如果加上括號:(\w+)-(\d+),那麼就能夠分別訪問第一部分的字元和第二部分的數字。
擴充套件表示法
. 它們都是以問號開始:“(?..)”,通常用於在判斷之前提供標記,實現一個前視(或後視)匹配,或是條件檢查。另外雖然使用了圓括號,但是隻有(?P<name>)表述一個分組匹配,其餘都不建立分組