如何學習正規表示式?總結乙個分類

2021-07-25 15:40:17 字數 2638 閱讀 8969

正規表示式能夠把你想要的字元從一段字串抓出來。那它是如何做到的呢?

1.要有乙個匹配的字元。就是如果你想要a,你就寫a,想要b,就寫b。比如從『abcdefg』裡抓『cde』,那麼正規表示式就是『cde』。簡單吧。

但是,如果你想要的不是個明確的,比如從『abcd1234xyz』裡面抓數字,可以使用表達匹配數字的字元\d。

如下是匹配各種字元的正規表示式:

\d 匹配任何十進位制數;它相當於類 [0-9]。

\d 匹配任何非數字字元;它相當於類 [^0-9]。

\s 匹配任何空白字元;它相當於類 [ fv]。

\s 匹配任何非空白字元;它相當於類 [^ fv]。

\w 匹配任何字母數字字元;它相當於類 [a-za-z0-9_]。

\w 匹配任何非字母數字字元;它相當於類 [^a-za-z0-9_]。

.表示任意字元

[]用來匹配乙個指定的字元類別,所謂的字元類

別就是你想匹配的乙個字符集,對於字符集中的字元可以理解成或的關係。

^ 如果放在字串的開頭,則表示取非的意思。[^5]表示除了5之外的其他字元。而如果^不在字串的開頭,則表示它本身。

元字元[^]. 

你可以用補集來匹配不在區間範圍內的字元。其做法是把"^"作為類別的首個字元;其它地方的"^"只會簡單匹配 "^"字元本身。例如,[^5] 將匹配除 "5" 之外的任意字元。同時,在[ ]外,元字元^表示匹配字串的開始,如"^ab+"表示以ab開頭的字串。

2 有時候正規表示式為『aaaaa『還可以寫出來,但是可能是『aaaaa『或是『aaa』,怎麼辦呢?那就需要重複功能的元字元了。

正規表示式的元字元有. ^ $ * ? 對於前乙個字元重複次數在為m到n次,其中

, = *, = , = ?

對於前乙個字元重複m次

3。下面講講沒有提到的元字元。不願意自己寫了,copy一下,其實很好理解

3. 元字元(\),元字元backslash。做為 python 中的字串字母,反斜槓後面可以加不同的字元以表示不同特殊意義。

它也可以用於取消所有的元字元,這樣你 就可以在模式中匹配它們了。例如,如果你需要匹配字元 "[" 或 "\",你可以在它們之前用反斜槓來取消它們的特殊意義: \[ 或 \\

4。元字元($)匹配字串的結尾或者字串結尾的換行之前。(在multiline模式下,"$"也匹配換行之前)

正規表示式"foo"既匹配"foo"又匹配"foobar",而"foo$"僅僅匹配"foo".

>>> re.findall("foo.$","foo1\nfoo2\n")#匹配字串的結尾的換行符之前。

['foo2']

>>> re.findall("foo.$","foo1\nfoo2\n",re.multiline)

['foo1', 'foo2']

>>> m=re.search("foo.$","foo1\nfoo2\n")

>>> m

<_sre.sre_match object at 0x00a27170>

>>> m.group()

'foo2'

>>> m=re.search("foo.$","foo1\nfoo2\n",re.multiline)

>>> m.group()

'foo1'

看來re.multiline對$的影響還是蠻大的。

5.元字元(*),匹配0個或多個

6.元字元(?),匹配乙個或者0個

7.元字元(+), 匹配乙個或者多個

8,元字元(|), 表示"或",如a|b,其中a,b為正規表示式,表示匹配a或者b

9.元字元({})

,用來表示前面正規表示式的m次copy,如"a",表示匹配5個」a」,即"aaaaa"

>>> re.findall("a","aaaaaaaaaa")

['aaaaa', 'aaaaa']

>>> re.findall("a","aaaaaaaaa")

['aaaaa']

用來表示前面正規表示式的m到n次copy,嘗試匹配盡可能多的copy。

>>> re.findall("a","aaaaaaaa")

['aaaa', 'aaaa']

通過上面的例子,可以看到,正規表示式優先匹配n,而不是m,因為結果不是["aa","aa","aa","aa"]

>>> re.findall("a","aaaaaaaa")

['aa', 'aa', 'aa', 'aa']

?  用來表示前面正規表示式的m到n次copy,嘗試匹配盡可能少的copy   

>>> re.findall("a?","aaaaaaaa")

['aa', 'aa', 'aa', 'aa']

10。元字元( 

"( )" ),用來表示乙個group的開始和結束。

比較常用的有(res),(?pres),這是無名稱的組和有名稱的group,有名稱的group,可以通過matchobject.group(name)

獲取匹配的group,而無名稱的group可以通過從1開始的group序號來獲取匹配的組,如matchobject.group(1)。具體應用將在下面的group()方法中舉例講解

正規表示式 正規表示式 總結

非負整數 d 正整數 0 9 1 9 0 9 非正整數 d 0 負整數 0 9 1 9 0 9 整數 d 非負浮點數 d d 正浮點數 0 9 0 9 1 9 0 9 0 9 1 9 0 9 0 9 0 9 1 9 0 9 非正浮點數 d d 0 0 負浮點數 正浮點數正則式 英文本串 a za z...

正規表示式 學習總結

1.正規表示式是可用於在乙個檔案或字元裡查詢和替代文字的一種標準。它具有兩種標準 基本的正規表示式 bre 擴充套件的正規表示式 ere ere包括bre功能和另外其它的概念。2.表示或運算 3.匹配任何單個字元 4.匹配任何中包含的單個字元,如 張王李 三,匹配張 三 王三,李三 5.將排除 後跟...

正規表示式學習總結

1.非列印字元 js css png jpg ico png gif cx 匹配由x指明的控制字元,x為a z或者a z之一 f 匹配乙個換頁符,等價於 x0c 為數字零 和 cl n 匹配乙個換行符,等價於 x0a和 cj r 匹配乙個回車符,等價於 x0d和 cm s 匹配任何空白字元 空格 換...