python3的正規表示式(regex)

2022-01-11 14:29:09 字數 3803 閱讀 9336

正規表示式提供了一種緊湊的表示法,可用於表示字串的組合,乙個單獨的正規表示式可以表示無限數量的字串。常用的5種用途:分析、搜尋、搜尋與替代、字串的分割、驗證。

(一)正規表示式語言

python中特殊字元有    \.^$?+*{}()|

1、字元類速記

^   如果在字元類中第乙個字元則表示否定;

-    表示乙個字元範圍,如果作為字元類中的第乙個字元,就表示乙個字面意義上的連字元;

.    可以匹配除換行符之外的任意字元,或帶re.dotall標記的任意字元,或匹配字元類內部的字面意義的字元;

\d    匹配乙個unicode數字,或帶re.ascii標記的[0-9];

\d  匹配乙個unicode非數字,或帶re.ascii標記的[^0-9];

\s   匹配unicode空白,或帶re.ascii標記的[\t\n\r\f\v];

\s   匹配unicode非空白,或帶re.ascii標記的[^\t\n\r\f\v];

\w   匹配乙個unicode單詞字元,或帶re.ascii標記的[a-za-z0-9_];

\w   匹配乙個unicode非單詞字元,或帶re.ascii標記的[^a-za-z0-9_]

2、量詞

格式,m與n分別表示使用該量詞的表達必須匹配的最少次數與最多次數。如果只給定乙個數字則同時表示最小值最大值

量詞速記形式:

e      準確匹配表示式e的m次出現

e     貪婪地匹配表示式e至少m次出現

e?     非貪婪地匹配表示式e至少m次出現

e      最多n次出現

e?      非貪婪

e?         e

e??       e?

e+          e

e+?       e?

e*        e

e*?        e?

匹配內的任意乙個內容

()       將()的內容作為乙個整體來進行匹配

貪婪表示會盡可以多的匹配符合條件的字元,非貪婪則為盡可以少的匹配。

3、可用air(craft|plane)來匹配 aircraft和airplane。

使用air(?:craft|plane)可以用來限制當處於更多的巢狀中時,aricraft和airplane只有一次捕獲。圓括號表示組。

4、\i反向引用,i表示前面的捕獲號。捕獲號也可以用在左圓括號前加 ?p來用名稱代替

如:(?p\w+)=(?p.+)對於捕獲進行反向引用(?p=name): (?p\w+)\s+(?p=word) 可以使用名為"word"的捕獲來匹配重複的單詞。

5、正規表示式斷言:

^     在起始處匹配,也可以在帶multiline標記的每個換行符後匹配;

$      在結尾處匹配,也可以在帶multiline標記的每個換行符前匹配;

\a     在起始處匹配;

\b    在單詞邊界匹配,受re.ascii影響,如果在字元內部則是backspace的轉義字元;

\b    在非單詞邊界匹配,受re.ascii影響;

\z    在結尾處匹配;

(?=e)    如果表示式e在此斷言處匹配,但沒有超出此處——稱為前瞻或正前瞻,則匹配;

(?!e)    如果表示式e在此斷言處不匹配,但沒有超出此處——稱為負前瞻,則匹配;

(?<=e)    如果表示式e恰在本斷言之前匹配——稱為正回顧,則匹配;

(?6、正規表示式的注釋

可用(?#the comment)來實現,也可用re.verbose標記。 

(二)正規表示式模組

正規表示式模組標記:

re.a 或 re.ascii

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

re.m 或 re.multiline    使^在起始處並在每個換行符後匹配,使$在結尾處但在每個換行符之前匹配

re.s 或 re.dotall    使.匹配每個字元,包括換行符

re.x 或 re.verbose    使空白與注釋包含在匹配中

正規表示式模組的函式(供查):

re.compile(r,f)    返回編譯後的正規表示式r,如果指定,就將其標記設定為f(即上邊的re.a等,且可同時有多個標記,用|分隔);(使用re'regex'的形式表達字串可不用轉義)

re.escape(s)       返回字串s,其中所有非字母數字的字元都使用反斜線進行了轉義處理,因此,返回的字串中沒有特殊的正規表示式字元;

re.findall(r,s,f)    返回正規表示式r在字串s中所有非交疊的匹配(如果給定f,就受其制約)。如果正規表示式中有捕獲,那麼每次匹配都作為乙個捕獲元組返回;

re.finditer(r,s,f)   對正規表示式r在字串s中每個非交疊的匹配(如果給定了f,就受其制約),都返回乙個匹配物件;

re.match(r,s,f)    如果正規表示式r在字串s的起始處匹配(如果給定f,就受其制約),就返回乙個匹配物件(matchobject),否則返回none;

re.search(r,s,f)   如果正規表示式r在字串s的任意位置匹配(如果給定f,就受其制約),就返回乙個匹配物件,否則返回none;

re.split(r,s,m)     返回分割字串s(在正規表示式r每次出現處進行分割)所產生的字串的列表,至多分割m次(如果沒有給定m,就盡可能多的分割),如果正規表示式中包含捕獲,就被包含在分割的部分之間;

re.sub(r,x,s,m)    對正規表示式r的每次匹配(如果給定m,那麼至多m次),返回字串s的乙個副本,並將其替換為x--這可以是乙個字串,也可以是乙個函式;

re.subn(r,x,s,m) 與re.sub()函式相同,區別在於此函式返回乙個二元組;

匹配物件屬性與方法:

m.end(g)      返回組g(如果給定)在文字匹配的終點索引位置,對組0,則表示整體匹配;如果匹配中不包含該組,就返回-1;

m.endpos      搜尋的終點索引位置

m.expands(s)    返回字串s,並將其中捕獲標識用相應的捕獲替代;

m.group(g,...)   返回編號的或命名的組g,如果給定的不止乙個,就返回相應的捕獲組成的元組;

m.groupdict(difault) 返回乙個字典,其中存放所有命名的捕獲組,組名作為鍵,捕獲作為值;如果給定了default引數,就將其用作那些不參與匹配的捕獲組的值;

m.groups(default) 返回包含所有捕獲的元組,從1開始;如果給定default,就將其用作那此不參與匹配的捕獲組的值;

m.lastgroup       匹配的、編號最高的捕獲組的名稱,如果不存在或沒有使用名稱,就返回none;

m.lastindex      匹配的、編號最高的捕獲組的編號,如果沒有就返回none;

m.pos            搜尋的起始索引位置;

m.re             產生這一匹配物件的正規表示式物件;

m.span(g)      如果給定g,就返回組g在文字中匹配的起始索引位置與結尾位置;(對組0,則是整體匹配);如果該組不參與匹配,就返回(-1,-1);

m.start(g)      如果給定g,就返回組g在文字中匹配的起始索引位置(對組0,則是整體匹配);如果該組不參加匹配,就返回-1;

m.string        傳遞給match()或search()的字串;

7、其他

(1)前後匹配邊界,但不匹配邊界

如:aa5646a22cc,匹配aa和cc之間的內容:(?<=aa).*(?=cc)

(2)匹配內容中不包含指定內容

如:maybe shell while, 匹配不包含字母a的單詞:((?!a)\w)+

Python3正規表示式和re模組

1.正規表示式 1.1 正規表示式符號 2.re模組 2.1 re.compile pattern flags 2.2 re.findall pattern,string,flags 0 2.3 re.finditer pattern,string,flags 0 2.4 re.match patt...

python3正規表示式

正規表示式,又稱規則表示式。英語 regular expression,在 中常簡寫為regex regexp或re 電腦科學的乙個概念。正規表示式通常被用來檢索 替換那些符合某個模式 規則 的文字。正規表示式是對字串操作的一種邏輯公式,就是用事先定義好的一些特定字元 及這些特定字元的組合,組成乙個...

Python3 正規表示式

常用的匹配模式 正規表示式是乙個特殊的字串行,它能幫助你方便的檢查乙個字串是否與某種模式匹配。re 模組使 python 語言擁有全部的正規表示式功能。re.match函式 re.match 嘗試從字串的起始位置匹配乙個模式,如果不是起始位置匹配成功的話,match 就返回none。re.match...