正規表示式(Python)

2021-08-26 05:37:07 字數 3230 閱讀 8595

python自1.5以後增加了re的模組,提供了正規表示式模式,re模組使python語言擁有了全部的正規表示式功能
原型:match(pattern, string, flags=0)

patter: 匹配的正規表示式

string: 要匹配的字串

flags:標誌位,用於控制正規表示式的匹配方式,值如下

re.i 忽略大小寫

re.l 做本地戶識別

re.m 多行匹配,影響^和$

re.s 是.匹配包括換行符在內的所有字元

re.u 根據unicode字符集解析字元,影響\w \w \b \b

re.x 使我們以更靈活的格式理解正規表示式

引數:功能:嘗試從字串的起始位置匹配乙個模式,如果不是起始位置匹配成功的話,返回none

原型:search(pattern, string, flags=0)

引數:patter: 匹配的正規表示式

string: 要匹配的字串

flags:標誌位,用於控制正規表示式的匹配方式

功能:掃瞄整個字串,並返回第乙個成功的匹配

原型:findall(pattern, string, flags=0)

引數:patter: 匹配的正規表示式

string: 要匹配的字串

flags:標誌位,用於控制正規表示式的匹配方式

功能:掃瞄整個字串,並返回匹配結果的元組

.                匹配除換行符('\n')以外的任意字元

[0123456789] 是字元集合,表示匹配方括號中所包含的任意乙個字元

[abcde] 匹配'a','b','c','d','e'中任意乙個字元

[a-z] 匹配任意小寫字母

[a-z] 匹配任意大寫字母

[0-9] 匹配任意數字,類似[0123456789]

[0-9a-za-z] 匹配任意的數字和字母

[0-9a-za-z_] 匹配任意的數字、字母和下劃線

[^abcde] 匹配除了sunck這幾個字母以外的所有字元,中括號裡的^稱為脫字元,表示不匹配集合中的字元

[^0-9] 匹配所有的非數字字元

\d 匹配數字,效果同[0-9]

\d 匹配非數字字元,效果同[^0-9]

\w 匹配數字,字母和下劃線,效果同[0-9a-za-z_]

\w 匹配非數字,字母和下劃線,效果同[^0-9a-za-z_]

\s 匹配任意的空白符(空格,換行,回車,換頁,製表),效果同[ \f\n\r\t]

\s 匹配任意的非空白符,效果同[^ \f\n\r\t]

^     行首匹配,和在裡的^不是乙個意思

$ 行尾匹配

\a 匹配字串開始,它和^的區別是,\a只匹配整個字串的開頭,即使在re.m模式下也不會匹配它行的行首

\z 匹配字串結束,它和$的區別是,\z只匹配整個字串的結束,即使在re.m模式下也不會匹配它行的行尾

\b 匹配乙個單詞的邊界,也就是值單詞和空格間的位置

'er\b'可以匹配never,不能匹配nerve。由於\b為backspace的轉義字元,因此使用時要把'\'進行轉義,避免系統當成backspace

\b 匹配非單詞邊界

說明:下方的x、y、z均為假設的普通字元,n、m(非負整數),不是正規表示式的元字元

(xyz) 匹配小括號內的xyz(作為乙個整體去匹配)

x? 匹配0個或者1個x

x* 匹配0個或者任意多個x(.* 表示匹配0個或者任意多個字元(換行符除外))

x+ 匹配至少乙個x

x 匹配確定的n個x(n是乙個非負整數)

x 匹配至少n個x

x 匹配至少n個最多m個x。注意:n <= m

x|y |表示或,匹配的是x或y

在 「*」   「+」   「」的後面加上「?」可以變成非貪婪匹配

*?   +?   ?  最小匹配,通常都是盡可能多的匹配,可以使用這種解決貪婪匹配
原型:finditer(pattern, string, flags=0)

引數:patter: 匹配的正規表示式

string: 要匹配的字串

flags:標誌位,用於控制正規表示式的匹配方式

功能:與findall類似,掃瞄整個字串,返回的是乙個迭代器

字串的替換和修改

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

subn(pattern, repl, string, count=0)

pattern: 正規表示式(規則)

repl: 指定的用來替換的字串

string: 目標字串

count: 最多替換次數

功能:在目標字串中以正規表示式的規則匹配字串,再把他們替換成指定的字串。可以指定替換的次數,如果不指定,替換所有的匹配字串

區別:前者返回乙個被替換的字串,後者返回乙個元組,第乙個元素被替換的字串,第二個元素表示被替換的次數

概念:除了簡單的判斷是否匹配之外,正規表示式還有提取子串的功能。用()表示的就是提取分組
str6 = "010-53247654"

m = re.match(r"(?p\d)-(?p\d)", str6)#first和last分別為組名

#使用序號獲取對應組的資訊,group(0)代表匹配到的結果

print(m.group(0))

print(m.group(1))

print(m.group("first"))

print(m.group(2))

#檢視匹配的各組的情況

print(m.groups())

當我們使用正規表示式時,re模組會幹兩件事

1、編譯正規表示式,如果正規表示式本身不合法,會報錯

2、用編譯後的正規表示式去匹配物件

compile(pattern, flags=0)

pattern:要編譯的正規表示式

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