正規表示式和python的re模組

2021-08-28 12:20:38 字數 4883 閱讀 4154

0 正規表示式

0.1 常見的元字元

.:    匹配除\r\n之外的任何單個字元

*:    匹配前面的子表示式任意次(0-無窮),例如zz*可以匹配z,可以匹配zz,也可以匹配zzzzzzzzzz

+:    匹配前面的子表示式任意次(1-無窮),例如hh+可以匹配hh,hhh,hhhhhhhhhhhhhhh

:    匹配前面的子表示式n次,例如h匹配hhhhhh

:    匹配前面的子表示式至少n次,例如h 匹配hhhhhh,hhhhhhhh,hhhhhhhhhhhhhhhhhh

:    匹配前面的子表示式n到m次

?:    匹配前面的子表示式0次或1次,等價於,如果跟在* + ? 後面則代表非貪婪模式。例如hhhhh,用h+匹配得到乙個結果hhhhh,用h+?則匹配到5個結果,5個都是h。

\:    轉義字元,例如\\n匹配\n,\n匹配換行符,\\匹配\,\(匹配(

^:    匹配字串的開頭,例如^hello匹配hello world

$:匹配字串的結尾,例如cut$:匹配字串的結尾,例如cut$匹配i am from cut

[...]:    字符集,匹配中括號內的任意字元,-代表範圍,^代表非,如果要表示[ ] - ^ 要在前面加上\ 或者把] - 放在首位,把^放到非首位,例如[^0-9]匹配非數字

|:    或,匹配左右表示式任意乙個,如果左邊匹配成功,就不再匹配右邊的表示式,例如convex|function匹配convex或者匹配function

(...):    分組,作為乙個整體被匹配,例如,(really ) 匹配really really really really really

(?p...):    分組,同時起乙個別名

(?p=name):    引用別名為name的分組匹配到的字串

\:    引用編號為number的分組匹配到的字串

\d:    匹配數字,等價於[0-9]

\d:    匹配非數字,等價於[^0-9]

\s:    匹配不可見字元,等價於[\f\n\r\t\v],\t是製表符\x09,\n是換行符\x0a,\v是垂直製表符\x0b,\f是換頁符\x0c,\r是回車符\x0d

\s:    匹配可見字元,等價於[^\s]

\w:    匹配包括下劃線的任何單詞字元(unicode字符集),類似但不等價於[a-za-z0-9_]

\w:    匹配任何非單詞字元,等價於[^\w]

1 python中的正則

1.1 反斜槓

在程式語言中使用正規表示式,當我們要匹配\的時候需要用4個\來匹配,\\\\匹配\,因為第一次程式語言會把\\\\轉移成\\,然後第二次正則會把\\轉移成\。如果用python的原生字串r來寫正則,則可以少寫兩個\,即r'\\'匹配\,r'\\d'匹配'\d',r『\d』則匹配數字

1.2  re模組的使

# 首先將正規表示式編譯成pattern物件

pattern = re.compile('keras')

# 可以用pattern物件的match方法匹配文字,從頭開始但不要求完全的匹配,可在最後加入$則是完全匹配,返回match物件或none

match = pattern.match('keras is a high-level neural networks api')

# 也可以用pattern物件的search方法匹配文字,在文字中尋找子串的匹配,返回match物件或none

match = pattern.search('keras is a high-level neural networks api')

# 用match物件的方法輸出匹配結果

if match:

print match.group()

# 另外可以直接使用re的方法進行匹配,這樣省了編譯那一行,但是不能復用。

re.match('tensorflow', 'tensorflow is an open-source library for machine intelligence')

re.search('machine intelligence', 'tensorflow is an open-source library for machine intelligence')

1.3  re.compile(pattern, flags=0)

返回:pattern物件

pattern: 字串形式的正規表示式,可利用上文的元字元和普通字元進行一系列組合得到

flags: 匹配模式,分為如下幾個(可用|使用多個,如re.i | re.

re.i或re.ignorecase:忽略大小寫

re.l或re.locale:使用當地locale。(python中有個locale模組,locale代表不同的語言,地區和字符集)

re.u或re.unicode:使用unicode的locale

re.m或re.multiline:使用^或$時會匹配每一行的行首或行尾

re.s或re.dotall:使用.時能匹配換行符

re.x或re.verbox:忽略空白字元,而且可以加入注釋

1.4  pattern物件

pattern物件代表乙個正規表示式,包含如下幾個方法,這些方法在re都有對應的方法,引數略有不同,下面也一起給出

match(string, pos=0, endpos=-1) | re.match(pattern, string, flags=0):    從頭開始匹配,返回乙個match物件或none。

search(string, pos=0, endpos=-1) | re.search(pattern, string, flags=0):    尋找子串的匹配,返回乙個match物件或none

split(string, maxsplit=0) | re.split(pattern, string, maxsplit=0, flags=0):    按照pattern切割string,maxsplit表示最大切割次數

findall(string , pos=0, endpos=-1) | re.findall(pattern, string, flags=0):    搜尋返回全部能匹配的子串

finditer(string, pos=0, endpos=-1) | re.finditer(pattern, string, flags=0):    搜尋返回match物件的迭代器

sub(repl, string, count=0) | re.sub(pattern, repl, string, count=0, flags=0):    使用repl替換string中能匹配的每乙個子串,返回替換後的子串,count指定最多替換次數。

subn(repl, string, count=0) | re.subn(pattern, repl, string, count=0, flags=0):    相比於sub,多返回了乙個次數,組成tuple。

1.5  match物件

match物件代表匹配的結果,包含匹配的相關資訊。

包含如下屬性:string, re( 匹配時使用的pattern物件), pos, endpos, lastindex(最後乙個匹配的分組的下標), lastgroup(最後乙個匹配的分組的別名)

包含如下方法:

group(group1, group2, group3,...):    

返回乙個或多個組匹配的子串,不填寫引數預設為group(0),代表整個匹配的子串。

group1可以是編號,也可以是組的別名。

沒匹配到的組返回none,匹配到多個子串的組返回最後乙個。

groups(default=none):    返所有組匹配的子串。當組沒有匹配到子串時候返回default。

groupdict(default=none):    返回字典,鍵為組的別名,值為該組匹配到的子串。沒有別名的組不返回。

start(groupnum=0):    返回指定組匹配的子串在string中的開始下標,沒有匹配則返回-1    

end(groupnum=0):    返回指定組匹配的子串在string中的結束下標,沒有匹配則返回-1

span(group=0):    返回(start(group), end(group))

1.6  unicode編碼

python中re模組的正則最好統一使用unicode編碼,即u'...'的形式。

因為之前沒有使用unicode,在匹配中文的時候出現了匹配錯誤的結果。

猜測是re模組裡的方法預設使用unicode編碼來執行的。

python 正規表示式 re

match 和 search 的區別 match是從字串開頭匹配,而search是在整個字串中匹配。如 p re.compile a z p.match message none 因為開頭是 因此無法匹配 而 m p.search message print m re.matchobject ins...

python正規表示式 re

re.match 嘗試從字串的開始匹配乙個模式,如 下面的例子匹配第乙個單詞。import retext jgood is a handsome boy,he is cool,clever,and so on.m re.match r w s text ifm print m.group 0 n m...

python正規表示式(re)

在python中re模組用於對正規表示式 regular expression 的支援。正規表示式是可以匹配文字片段的模式。一 正規表示式的書寫 1 萬用字元 點 可以匹配任何字元 除了換行符 如 ike 可以匹配 bike like 等 2 對特殊字元進行轉義 在正規表示式中如果是引用特殊字元作為...