Python正規表示式

2022-09-01 06:24:09 字數 3988 閱讀 1330

re 模組使 python 語言擁有全部的正規表示式功能。

compile 函式根據乙個模式字串和可選的標誌引數生成乙個正規表示式物件。該物件擁有一系列方法用於正規表示式匹配和替換。

re 模組也提供了與這些方法功能完全一致的函式,這些函式使用乙個模式字串做為它們的第乙個引數。

re.match 嘗試從字串的起始位置匹配乙個模式,如果不是起始位置匹配成功的話,match()就返回none。

函式語法

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

pattern:匹配的正規表示式

string:要匹配的字串。
flags:標誌位,用於控制正規表示式的匹配方式
import

reprint(re.match('

www', '

www.hbnu.com

').span()) #

在起始位置匹配

print(re.match('

com', '

www.hbnu.com

')) #

不在起始位置匹配

結果:

我們可以使用group(num) 或 groups() 匹配物件函式來獲取匹配表示式。

re.search 掃瞄整個字串並返回第乙個成功的匹配。

函式語法:

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

裡面的三個引數和re.match函式一樣。

import

reprint(re.search('

www', '

www.aaa.com

').span()) #

在起始位置匹配

print(re.search('

com', '

www.aaa.com

').span()) #

不在起始位置匹配

結果:

re.match只匹配字串的開始,如果字串開始不符合正規表示式,則匹配失敗,函式返回none;而re.search匹配整個字串,直到找到乙個匹配。

python 的 re 模組提供了re.sub用於替換字串中的匹配項。

語法:

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

引數:

importre 

phone = "

2004-959-559 # 這是乙個國外**號碼"#

刪除字串中的 python注釋

num = re.sub(r'

#.*$

', ""

, phone)

print ("

**號碼是:{}

".format(num)) #

刪除非數字(-)的字串

num = re.sub(r'

\d', ""

, phone)

print ("

**號碼是 :

", num)

結果:

compile 函式用於編譯正規表示式,生成乙個正規表示式( pattern )物件,供 match() 和 search() 這兩個函式使用。

語法格式為:

re.compile(pattern[,flags])

引數:

import

repattern = re.compile(r'

\d+') #

用於匹配至少乙個數字

m = pattern.match('

one12twothree34four

') #

查詢頭部,沒有匹配

print

(m)m = pattern.match('

one12twothree34four

', 2, 10) #

從'e'的位置開始匹配,沒有匹配

print

(m)m = pattern.match('

one12twothree34four

', 3, 10) #

從'1'的位置開始匹配,正好匹配

print (m) #

返回乙個 match 物件

print(m.group(0)) #

可省略 0

print

(m.start(0))

print

(m.end(0))

print(m.span(0))

結果:

在上面,當匹配成功時返回乙個 match 物件,其中:

在字串中找到正規表示式所匹配的所有子串,並返回乙個列表,如果沒有找到匹配的,則返回空列表。

注意:match 和 search 是匹配一次 findall 匹配所有。

語法格式為:

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

引數:

importre 

pattern = re.compile(r'

\d+') #

查詢數字

result1 = pattern.findall('

aaaaa 123 bbbbb 456')

result2 = pattern.findall('

aaa88aa123bbbbb456

', 0, 10)

print

(result1)

print(result2)

結果:

和 findall 類似,在字串中找到正規表示式所匹配的所有子串,並把它們作為乙個迭代器返回

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

importre 

a = re.finditer(r"

\d+","

12aaaa32bbb43ccc3")

for match in

a:

print (match.group() )

結果:

split 方法按照能夠匹配的子串將字串分割後返回列表,它的使用形式如下:

re.split(pattern,string[,maxsplit=0,flags=0])

import

rea=re.split('

\w+', '

aaa, aaa, aaa.')

b=re.split('

(\w+)

', '

bbb, ccc, ddd.')

c=re.split('

\w+', '

ccc, ccc, ccc.

', 2)

d=re.split('

a', '

hello world

') #

對於乙個找不到匹配的字串而言,split 不會對其作出分割

print

(a)print

(b)print

(c)print(d)

結果:

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