python 正規表示式

2021-10-01 07:37:04 字數 4050 閱讀 1452

(2)非貪婪匹配

中文輸出對齊問題:

chr(12288)–用中文空格填充。

.		『表示任何單個字元』

『字符集, 對單個字元給出取值範圍。『』中的字元是或的關係』

[^] 『非字符集,對單個字元給出排除範圍。 』

* 『前乙個字元 0次或無限次擴充套件』

+ 『前乙個字元 1次或無限次擴充套件』

? 『前乙個字元0次或1次擴充套件』

| 『左右表示式任意1個』

{} 『 擴充套件前乙個字元m次』

『擴充套件前乙個字元m至n次(含n)』

^ 『匹配字串開頭, 如^abc,表示匹配的字串的開頭一定是 abc』

$ 『匹配字串結尾,abc$, 結束匹配。』

() 『分組標記,內部只能用|操作符,就是將括號內的內容看為乙個整體。』

\d 『數字,等價於[0-9]』

\w 『單詞字元,等價於 [a-za-z0-9_]』

^[a-za-z]+$ 		: 表示26個字母組成的字串

^[a-za-z0-9]+$ : 表示26個字母和數字組成的字串

^-?\d+$ : 表示整數形式的字串

^[0-9]*[1-9][0-9]*$ : 正整數形式的字串

[\u4e00-\u9fa5] : 匹配中文字元

\d-\d|\d-\d

:國內**號碼

(([1-9]?\d|1\d|2[0-4]\d|25[0-5]).)([1-9]?\d|1\d|2[0-4]\d|25[0-5])

: ip位址的正規表示式

常用函式:

re.findall()   搜尋字串,以列表形式返回全部能匹配的子串	 (常用)

re.sub() 替換匹配到的子串,返回替換後的字串。 (常用)

re.spilt() 將乙個字串按照正則分割,返回列表型別 (常用)

re.search(

) 在乙個字串中搜尋匹配正規表示式的第乙個位置,返回match物件

re.match(

) 從乙個字串的開始位置起匹配正則,返回match物件

re.finditer(

) 搜尋字串,返回匹配結果的迭代形式。

詳細使用:

"""re.search()"""

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

::args: pattern:正規表示式

string: 要匹配字串

flags:正規表示式使用時的控制標記:

"""控制標記"""

re.i 忽略大小寫

re.m 正規表示式中的^操作符能將給定字串的每行當作匹配開始

re.s 正則中的.操作符能夠匹配所有字元,預設匹配除換行符外的所有字元。

:return

: 返回match物件

"""re.match()"""

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

:"""re.findall()"""

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

:"""re.split()"""

re.split(pattern, string, maxsplit=

0, flags=0)

: args: maxsplit最大分割數(分割為多少個部分),剩餘部分作為最後乙個元素輸出.

"""re.finditer()"""

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

::return

: 返回乙個匹配結果的迭代型別,每個迭代元素是match物件。

"""re.sub()"""

re.sub(pattern, repl, string, count=

0, flags=0)

::args: repl:替換匹配字串的字串

count:匹配的最大替換次數

"""match物件的屬性"""

match物件的屬性:

.string: 待匹配的文字

.re 匹配時使用的patten物件(正規表示式)

.pos 正規表示式搜尋文字時的開始位置

.endpos 結束位置

.group(

0) 獲得匹配後的字串

.start(

)匹配字串在原始字串的開始位置

.end(

) 結束位置

.span(

) 返回(

.start(

).end(

))

正規表示式的另一種等價用法:

物件導向用法:編譯後的多次操作:

pat = re.compile(r'[1-9]\d')

rst = pat.search('bit 100081')

將正規表示式編譯稱為乙個正規表示式的型別。之後可直接呼叫pat的各種方法。

regex = re.compile(pattern, flags)

在一些正規表示式中經常會碰到.*?,.+?,.*等,這些都是貪婪與非貪婪的匹配模式。

.	匹配任意單個字元;

* 匹配前乙個字元0次或無限次;

+ 匹配前乙個字元1次或無限次;

? 匹配前乙個字元0次或1次;

re 預設採用貪婪匹配,即輸出匹配最長的子串.*表示返回最大匹配字串;

比如:

str

='base4,aaaadjiwsj19301309aaasjdf0fj2fjasdjf0aaaaa'

pattern =

'base4,(a.*aa)'

# .*表示任意字元的無限擴充套件,所以括號內表示,只要以a開頭,aa結尾的字串都滿足規則,但是會返回最大匹配長度,即貪婪匹配。

re_str = re.search(pattern,

str)

結果:base4,aaaadjiwsj19301309aaasjdf0fj2fjasdjf0aaaaa

當匹配的操作符有不同長度時,都可以新增乙個問號,來進行最短匹配。

.*?.+?表示非貪婪匹配

比如:

str

='base4,aaaadjiwsj19301309aaasjdf0fj2fjasdjf0aaaaa'

pattern =

'base4,(a.*?aa)'

# .*表示任意字元的無限次擴充套件,所以括號內表示,只要以a開頭,aa結尾的字串都滿足規則,因為加了乙個?,會返回最小匹配長度0次擴充套件,即非貪婪匹配。

re_str = re.search(pattern,

str)

結果:base4,aaa

.+?同理

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