python 正規表示式

2021-09-24 23:41:54 字數 2973 閱讀 2746

re.match函式

re.match 嘗試從字串的起始位置匹配乙個模式,如果不是起始位置匹配成功的話,match()就返回none。

函式語法:

re.match(pattern, string, flags=0)

函式引數說明:

引數 描述

pattern 匹配的正規表示式

string 要匹配的字串。

flags 標誌位,用於控制正規表示式的匹配方式,如:是否區分大小寫,多行匹配等等。

匹配成功re.match方法返回乙個匹配的物件,否則返回none。

re.search方法

re.search 掃瞄整個字串並返回第乙個成功的匹配。

函式語法:

re.search(pattern, string, flags=0)

函式引數說明:

引數 描述

pattern 匹配的正規表示式

string 要匹配的字串。

flags 標誌位,用於控制正規表示式的匹配方式,如:是否區分大小寫,多行匹配等等。

匹配成功re.search方法返回乙個匹配的物件,否則返回none。

基礎規則

在正規表示式中,如果直接給出字元,就是精確匹配。用\d可以匹配乙個數字,\w可以匹配乙個字母或數字,所以:

『00\d』可以匹配』007』,但無法匹配』00a』;

『\d\d\d』可以匹配』010』;

『\w\w\d』可以匹配』py3』;

.可以匹配任意字元,所以:

'py.『可以匹配』pyc』、『pyo』、'py!'等等。

要匹配變長的字元,在正規表示式中,用表示任意個字元(包括0個),用+表示至少乙個字元,用?表示0個或1個字元,用表示n個字元,用表示n-m個字元*:

來看乙個複雜的例子:\d\s+\d。

我們來從左到右解讀一下:

\d表示匹配3個數字,例如』010』;

\s可以匹配乙個空格(也包括tab等空白符),所以\s+表示至少有乙個空格,例如匹配』 『,』 '等;

\d表示3-8個數字,例如』1234567』。

綜合起來,上面的正規表示式可以匹配以任意個空格隔開的帶區號的**號碼。

如果要匹配』010-12345』這樣的號碼呢?由於』-『是特殊字元,在正規表示式中,要用』'轉義,所以,上面的正則是\d-\d。

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

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

\s 匹配任何空白字元;它相當於類 [ \t\n\r\f\v]。

\s 匹配任何非空白字元;它相當於類 [^ \t\n\r\f\v]。

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

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

高階

要做更精確地匹配,可以用表示範圍,比如:

[0-9a-za-z_]可以匹配乙個數字、字母或者下劃線;

[0-9a-za-z_]+可以匹配至少由乙個數字、字母或者下劃線組成的字串,比如』a100』,『0_z』,'py3000』等等;

[a-za-z_][0-9a-za-z_]*可以匹配由字母或下劃線開頭,後接任意個由乙個數字、字母或者下劃線組成的字串,也就是python合法的變數;

[a-za-z_][0-9a-za-z_]更精確地限制了變數的長度是1-20個字元(前面1個字元+後面最多19個字元)。

a|b可以匹配a或b,所以(p|p)ython可以匹配』python』或者』python』。

表示行的開頭,\d表示必須以數字開頭。

katex parse error: expected 'eof', got '\d' at position 8: 表示行的結束,\̲d̲表示必須以數字結束。

你可能注意到了,py也可以匹配』python』,但是加上^py$就變成了整行匹配,就只能匹配』py』了。

正規表示式使用 python 的 raw 字串表示;在字串前加個 「r」 反斜槓就不會被任何特殊方式處理,所以 r"\n" 就是包含"" 和 「n」 的兩個字元,而 「\n」 則是乙個字元,表示乙個換行。正規表示式通常在 python **中都是用這種 raw 字串表示。

regexobject例項的方法和屬性

方法/屬性 作用

match() 決定 re 是否在字串剛開始的位置匹配

search() 掃瞄字串,找到這個 re 匹配的位置

findall() 找到 re 匹配的所有子串,並把它們作為乙個列表返回

finditer() 找到 re 匹配的所有子串,並把它們作為乙個迭代器返回

matchobject 例項的幾個方法和屬性

方法/屬性 作用

group() 返回被 re 匹配的字串

start() 返回匹配開始的位置

end() 返回匹配結束的位置

span() 返回乙個元組包含匹配 (開始,結束) 的位置

#!python

p = re.compile( ... )

m = p.match( 'string goes here' )

if m:

print 'match found: ', m.group()

else:

print 'no match'

#!python

p = re.compile( ... )

m = p.match( 'string goes here' )

if m:

print 'match found: ', m.group()

else:

print 'no match'

詳解

鏈結標題

python正規表示式元字元 正規表示式

字元 描述將下乙個字元標記為乙個特殊字元 或乙個原義字元 或乙個 向後引用 或乙個八進位制轉義符。例如,n 匹配字元 n n 匹配乙個換行符。序列 匹配 而 則匹配 匹配輸入字串的開始位置。如果設定了 regexp 物件的 multiline 屬性,也匹配 n 或 r 之後的位置。匹配輸入字串的結束...

Python 正規表示式

1.在python中,所有和正規表示式相關的功能都包含在re模組中。2.字元 表示 字串的末尾 如 road 則表示 只有當 road 出現在乙個字串的尾部時才會匹配。3.字元 表示 字元中的開始 如 road 則表示 只有當 road 出現在乙個字串的頭部時才會匹配。4.利用re.sub函式對字串...

Python正規表示式

學習python自然而然就不得不面對正規表示式這個難題。當初在沒有學習python之前,自己也曾經嘗試著學習過正規表示式,但是那時候感覺很麻煩,很難懂,結果就是不了了之。但是現在學習python我用的書是 python基礎教程 第二版 這本書中對re模組的講解很簡單易懂,內容不多但起碼把人領進門了,...