python正規表示式

2022-05-08 12:24:09 字數 4054 閱讀 9658

正規表示式

1. 匹配乙個字元

說明

表示式

等價表示式

數字\d

[0-9]

字母、數字、下劃線

\w[a-za-z0-9_]

除換行外任意字元.空格

\s[\t\n\r\f\v]

除數字\d

除字母、數字、下劃線

\w除空格

\s2. 集合

表示式

說明

[abc][a-g]

指乙個集合,匹配中的任意乙個

[^a]

^在集合開頭,匹配除a以外字元

a|b匹配a或b表示式

(a)()指乙個組,匹配a中所有內容

3. 重複

表示式

說明

a?貪心地匹配a 0次或1次(貪心表示盡可能多地)

a信心地匹配a m-n次。:0-n次 :m-無限次

a*貪心地匹配a 0-無限次

a+貪心地匹配a 1-無限次

a??  a*?  a+? a?

盡可能少地匹配

4. 匹配位置

表示式

說明

^...

要求匹配給定串的開頭

...$

要求匹配給定串的結尾

...\b

匹配單詞邊界,匹配成功要求a匹配到給定串的邊界

使用時模式串要用r,因為\b還有其它意義

...\b

匹配單詞非邊界

\a...

要求匹配給定串的開頭

...\z

要求匹配給定串的結尾

5. 設定標誌

表示式

說明

(?ailmsux)

(?)是固定格式,後面的字母代表不同意思。

a(ascii),i(ignorecase),l(locale),

m(multiline,^和$會匹配每一行的開頭和結尾),

s(dotall,不用的時候.不能匹配換行符),u(),

x(verbose,可以在pattern裡面換行寫注釋,

如a = re.compile(r"""\d +  # the integral part \.    

# the decimal point \d *  

# some fractional digits""", re.x),

#用來表示注釋的開始)

(?imsx-imsx:...)

設定或移除標誌,中間是-,標誌的集合為imsx

(?p...)

和一般()表示式一樣,額外功能:可以用name來訪問到對應的組

例:matchobj = re.match("?p.*)", "first")

data = matchobj.group("first")

(?p=name)

可以反向引用乙個名字為name的組

(?#...)

#說明括號中的內容是注釋,直接省略

a(?=b)

若a在b前,才可匹配出a,同時b不消耗字元

a(?!b)

若a不在b前,才可匹配出a,同時b不消耗字元

(?<=a)b

若a在b前,才可匹配出b,同時a消耗字元

(?若a不在b前,才可匹配出b,同時a消耗字元

\number

引用第number組的模式串

pattern = '(a)(b) \2' 和 pattern = '(a)(b)(b)'是等價的

例:re.search(r'(a)(b)\2', 'abb')

函式

1. re:正規表示式模組

函式宣告

功能備註

compile(pattern, flag=0)

把乙個正規表示式編譯成乙個正規表示式物件

pattern: 模式串flag:編譯方法

search(pattern, string, flags=0)

如果匹配不成功,則返回none成功,則matchobject型別值

split(pattern, string, maxsplit-0, flags=0)

按照pattern模式對string進行分割(1. 把匹配成功的部分除去且成為分界

2. 如果pattern中有(),那麼匹配成功的部分不除去且自己成為乙個組)

maxsplit:最多分割次數

如果pattern在串的最後能匹配成功,則還會分割出乙個空串

findall(pattern, string, flags=0)

把string按照pattern從左到右匹配,子串結果以元組形式返回(不重疊)

finditer(pattern, string, flags=0)

把string按照pattern從左到右匹配,返回迭代器(不重疊)

sub(pattern, repl, string, count=0, flags=0)

string中和pattern匹配成功的部分刪除(只有最左的),

用repl來替換,返回匹配後的串

count:要刪除匹配成功的個數,如果取0則所有都要換

escape(pattern)

把pattern中除了ascii字母和數字保留,其它都加上轉義符\,

並返回修改後的串(當串中可能包含正規表示式特殊符號時可用來轉換)

2.re.regexobject類:正規表示式物件,對應的函式功能與re模組類似,返回re.matchobject物件

函式宣告

功能備註

search(string[,pos[,endpos]])

pos和endpos可不寫

match(string[,pos[,endpos]])

split(string, maxsplit=0)

findall(string[,pos[,endpos]])

finditer(string,[,pos[,endpos]])

sub(repl, string, count=0)

groups

模式中子組的個數

groupindex

返回組名字與(?p)定義組順序的對映字典

pattern

模式串

3. re.matchobject類:匹配結果類

函式宣告

功能備註

group(index1, index2,...)

返回匹配結果組

index指出要返回結果組的下標,預設為0,

把所有結果寫成串。若有多個,以元組形式返回

groups()

返回所有子組的元組

groupdict()

把所有命名的子組以字典形式返回

start([group])

end([group])

返回子組(用名字或下標標識)

在串中匹配成功開始/結果的位置

startpos  endpos

傳遞給search和match函式時

指定的開始/結束匹配串的位置

lastindex  lastgroup

最後匹配成功的組的下標/名字

如果沒有的話,返回none   

re匹配時用的正規表示式物件

string

傳遞給match/search函式的串

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模組的講解很簡單易懂,內容不多但起碼把人領進門了,...