1. re模塊介紹
正則表達(dá)式
在處理字符串時(shí),經(jīng)常會(huì)有查找符合某些復(fù)雜規(guī)則的字符串的需求。正則表達(dá)式就是用于描述這些規(guī)則的工具。換句話說(shuō),正則表達(dá)式就是記錄文本規(guī)則的代碼。
re 模塊
Python 提供了 re 模塊用于實(shí)現(xiàn)正則表達(dá)式的操作。在實(shí)現(xiàn)時(shí),可以使用 re 模塊提供的方法,如search()、match()、findall() 等,進(jìn)行字符串處理,也可以先使用 re 模塊的 compile() 方法將模式字符串轉(zhuǎn)換為正則表達(dá)式對(duì)象,然后再使用該正則表達(dá)式對(duì)象的相關(guān)方法來(lái)操作字符串。re 模塊在使用時(shí),需要先用 import 語(yǔ)句引入,具體代碼如下:
import re
2. 定位符,描述字符的邊界
3. 預(yù)定義字符集,標(biāo)準(zhǔn)字符轉(zhuǎn)義序列
4. 通配符,匹配非預(yù)定義字符集合
在正則表達(dá)式中,提供了一個(gè)通配符——英文狀態(tài)下輸入的“.”,用于匹配除“\r”和“\n”以外的任意單個(gè)字符。如果想要使用“.”匹配“\n”換行符,則需要指定 flags=re.DOTALL。例如,“.”可以匹配 mr\nM\tR 中的 m、r、M、\t、R。
5. 非預(yù)定義字符集,匹配非預(yù)定義字符集合
6. 限定符,限定匹配次數(shù)
7. 管道符,“或”操作
正則表達(dá)式中提供了管道符,即“或”操作符,用于匹配兩個(gè)或者多個(gè)正則表達(dá)式中的一個(gè)。例如,A|B,其中 A 和 B 都是正則表達(dá)式,在匹配時(shí),從左到右進(jìn)行匹配,當(dāng)一個(gè)樣式完全匹配時(shí),另一個(gè)就不再匹配。即如果 A 匹配成功,則 B 就不再匹配。
8. 子模式,分組
子模式也就是分組的意思,使用小括號(hào)可以對(duì)正則表達(dá)式進(jìn)行分組。如 (.[0-9]{1,3}){3},就是對(duì)分組 (.[0-9]{1,3}) 進(jìn)行重復(fù)操作。
另外,小括號(hào)字符也可以改變限定符的作用范圍,如“|”“*”“^”等。來(lái)看下面的一個(gè)表達(dá)式:
(thir|four)th
這個(gè)表達(dá)式的意思是匹配單詞 thirth 或 fourth,如果不使用小括號(hào),那么就變成了匹配單詞 thir或 fourth 了。
9. 轉(zhuǎn)義字符,將特殊字符變?yōu)槠胀ㄗ址?/h2>
正則表達(dá)式中的轉(zhuǎn)義字符(\)和 Python 中的大同小異,都是將特殊字符(如“.”“?”“\”等)變?yōu)槠胀ㄗ址?。舉一個(gè) IP 地址的實(shí)例,用正則表達(dá)式匹配諸如 127.0.0.1 這樣格式的 IP 地址,如果直接使用點(diǎn)字符,格式為:
[1-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}
這顯然不對(duì),因?yàn)椤?”可以匹配一個(gè)任意字符。這時(shí),不僅是 127.0.0.1 這樣的 IP,連127101011 這樣的字符串也會(huì)被匹配出來(lái)。所以在使用“.”時(shí),需要使用轉(zhuǎn)義字符(\)。修改后上面的正則表達(dá)式格式為:
[1-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}
10. 可選標(biāo)志修飾符,控制匹配方式
在使用 re 模塊提供的方法時(shí),經(jīng)常需要指定一個(gè) flags 參數(shù),該參數(shù)為標(biāo)志修飾符,是一個(gè)可選參數(shù)。通過(guò)它可以指定是否區(qū)分字母大小寫、多行匹配等。
11. compile()方法,編譯為正則表達(dá)式對(duì)象
語(yǔ)法參考
compile() 方法用于編譯正則表達(dá)式模式,返回一個(gè)對(duì)象的模式。然后可以通過(guò) RegexObject 對(duì)象調(diào)用 match() 和 search() 方法。語(yǔ)法格式如下:
re.compile(pattern,flags=0)
參數(shù)說(shuō)明:
-
pattern :編譯時(shí)用的表達(dá)式字符串。
-
flags :編譯標(biāo)志位,用于修改正則表達(dá)式的匹配方式,如是否區(qū)分大小寫、多行匹配等。
-
返回值:返回一個(gè)正則表達(dá)式對(duì)象。
錦囊1 查找包含指定字母的單詞
使用 compile() 方法創(chuàng)建一個(gè)可以查找包含指定字母對(duì)應(yīng)單詞的正則表達(dá)式對(duì)象,并輸出符合條件的英文單詞,代碼如下:
import re # 導(dǎo)入正則表達(dá)式re模塊
# 需要匹配的字符串
string = “Tina is a good girl, she is cool, clever, and so on...”
match = re.compile(r’\w*oo\w*’) # 創(chuàng)建正則表達(dá)式對(duì)象
print(match.findall(string )) # 打印所有包含“oo”的單詞
12. escape()方法,轉(zhuǎn)義特殊字符
語(yǔ)法參考
escape() 方法用于對(duì)字符串中的非字母數(shù)字進(jìn)行轉(zhuǎn)義。語(yǔ)法格式如下:
re.escape(pattern)
參數(shù)說(shuō)明:
-
pattern :表示模式字符串,由要匹配的正則表達(dá)式轉(zhuǎn)換而來(lái)。
-
返回值:返回轉(zhuǎn)義后的字符串。
錦囊1 對(duì)字符串中的非字母數(shù)字進(jìn)行轉(zhuǎn)義
使用 escape() 方法實(shí)現(xiàn)對(duì)字符串中的非字母數(shù)字進(jìn)行轉(zhuǎn)義,代碼如下:
import re # 導(dǎo)入正則表達(dá)式re模塊
# 需要轉(zhuǎn)義的字符串
string = ‘a(chǎn)bcdefghijklmnopqrstuvwxyz0123456789!#$%&*+-.^_`|~’
print(re.escape(string)) # 打印轉(zhuǎn)義后的字符串
程序運(yùn)行結(jié)果如下:
abcdefghijklmnopqrstuvwxyz0123456789!\#\$%\&\*\+\-\.\^_`\|\~
13. f?indall()方法,搜索所有符合正則表達(dá)式的字符串
語(yǔ)法參考
findall() 方法用于在整個(gè)字符串中搜索所有符合正則表達(dá)式的字符串,并以列表的形式返回。如果匹配成功,則返回包含匹配結(jié)構(gòu)的列表,否則返回空列表。語(yǔ)法格式如下:
re.findall(pattern, string, flags=0)
參數(shù)說(shuō)明:
-
pattern :表示模式字符串,由要匹配的正則表達(dá)式轉(zhuǎn)換而來(lái)。decimal
-
string :表示要匹配的字符串。
-
flags :可選參數(shù),表示標(biāo)志位,用于控制匹配方式,如是否區(qū)分字母大小寫。
-
返回值:返回一個(gè)符合表達(dá)式匹配結(jié)果的列表。
錦囊1 搜索以“mr_”開頭的字符串
使用 findall() 方法搜索以“mr_”開頭的字符串,代碼如下:
import re # 導(dǎo)入正則表達(dá)式re模塊
pattern = r’mr_\w+’ # 模式字符串
string = ‘MR_SHOP mr_shop’ # 要匹配的字符串
match = re.findall(pattern,string,re.I) # 搜索字符串,不區(qū)分大小寫
print(match) # 打印匹配結(jié)果
string = ‘項(xiàng)目名稱MR_SHOP mr_shop’
match = re.findall(pattern,string) # 搜索字符串,區(qū)分大小寫
print(match) # 打印匹配結(jié)果
14. f?inditer()方法,找到所匹配的所有子串
語(yǔ)法參考
finditer() 方法和 findall() 方法類似,它的功能為在字符串中找到正則表達(dá)式所匹配的所有子串,但是把它們作為一個(gè)迭代器返回。語(yǔ)法格式如下:
re.finditer(pattern, string, flags=0)
參數(shù)說(shuō)明:
-
pattern :表示匹配的正則表達(dá)式。
-
string :表示要匹配的字符串。
-
flags :表示標(biāo)志位,用戶控制正則表達(dá)式的匹配方式,如是否區(qū)分大小寫、多行匹配等。
-
返回值:返回一個(gè)符合表達(dá)式匹配結(jié)果的迭代器。
錦囊1 獲取字符串中的數(shù)字
使用 finditer() 方法獲取字符串中的所有數(shù)值,代碼如下:
import re # 導(dǎo)入正則表達(dá)式re模塊
# 獲取字符串中的數(shù)字
it = re.finditer(r”\d+”,”12a32bc43jf3”)
# 便利獲取后的迭代對(duì)象
for match in it:
print (match.group()) # 打印數(shù)字
15. fullmatch()方法,對(duì)整個(gè)字符串進(jìn)行匹配
語(yǔ)法參考
fullmatch() 方法用于對(duì)整個(gè)字符串進(jìn)行匹配,如果整個(gè)字符串匹配到正則表達(dá)式樣式,就返回一個(gè)相應(yīng)的匹配對(duì)象,否則就返回一個(gè) None。語(yǔ)法格式如下:
re.fullmatch(pattern,string,flags=0)
參數(shù)說(shuō)明:
-
pattern :表示模式字符串,由要匹配的正則表達(dá)式轉(zhuǎn)換而來(lái)。
-
string :表示要匹配的字符串。
-
flags :可選參數(shù),表示標(biāo)志位,用于控制匹配方式,如是否區(qū)分字母大小寫。
-
返回值:如果整個(gè) string 匹配到正則表達(dá)式樣式,就返回一個(gè)相應(yīng)的 Match 對(duì)象。
錦囊1 匹配整個(gè)字符串
使用 fullmatch() 方法實(shí)現(xiàn)匹配整個(gè)字符串,代碼如下:
import re # 導(dǎo)入正則表達(dá)式re模塊
string1 = “mr00soft” # 需要匹配的字符串
# 匹配包括下劃線在內(nèi)的任何字符,并匹配前面的子表達(dá)式一次或多次
match1 = re.fullmatch(‘\w+’, string1)
# 單個(gè)字符匹配任意次,貪婪匹配
match2 = re.fullmatch(‘.*’, string1)decimal
# 匹配多個(gè)數(shù)字
match3 = re.fullmatch(‘\d+’, string1)
print(match1)
print(match2)
print(match3)
程序運(yùn)行結(jié)果如下:
<re.Match object; span=(0, 8), match='mr00soft'>
<re.Match object; span=(0, 8), match='mr00soft'>
None
16. match()方法,從字符開始處進(jìn)行匹配
語(yǔ)法參考
match() 方法用于從字符串的開始處進(jìn)行匹配,如果在起始位置匹配成功,則返回 Match 對(duì)象,否則返回 None。語(yǔ)法格式如下:
re.match(pattern,string,flags=0)
參數(shù)說(shuō)明:
-
pattern :表示模式字符串,由要匹配的正則表達(dá)式轉(zhuǎn)換而來(lái)。
-
string :表示要匹配的字符串。
-
flags :可選參數(shù),表示標(biāo)志位,用于控制匹配方式,如是否區(qū)分字母大小寫。
-
返回值:如果 string 的開始處有 0 或多個(gè)字符匹配到了正則表達(dá)式樣式,就返回一個(gè)相應(yīng)的 Match 對(duì)象。
錦囊1 判斷匹配字符串是否以“mr_”開頭
使用 match() 方法判斷匹配字符串是否以“mr_”開頭,不區(qū)分字母大小寫,代碼如下:
import re # 導(dǎo)入正則表達(dá)式re模塊
pattern = r’mr_\w+’ # 模式字符串
string = ‘MR_SHOP mr_shop’ # 要匹配的字符串
match = re.match(pattern,string,re.I) # 匹配字符串,不區(qū)分大小寫
print(match) # 打印匹配結(jié)果
string = ‘項(xiàng)目名稱MR_SHOP mr_shop’
match = re.match(pattern,string,re.I) # 匹配字符串,不區(qū)分大小寫
print(match) # 打印匹配結(jié)果
程序運(yùn)行結(jié)果如下:
<re.Match object; span=(0, 7), match='MR_SHOP'>
None
17. search()方法,搜索第一個(gè)匹配位置
語(yǔ)法參考
search() 方法用于在整個(gè)字符串中搜索第一個(gè)匹配的值,如果匹配成功,則返回 Match 對(duì)象,否則返回 None。語(yǔ)法格式如下:
re.search(pattern,string,flags=0)
參數(shù)說(shuō)明:
-
pattern :表示模式字符串,由要匹配的正則表達(dá)式轉(zhuǎn)換而來(lái)。
-
string :表示要匹配的字符串。
-
flags :可選參數(shù),表示標(biāo)志位,用于控制匹配方式,如是否區(qū)分字母大小寫。
-
返回值:掃描整個(gè)字符串找到匹配樣式的第一個(gè)位置,并返回一個(gè)相應(yīng)的匹配對(duì)象。如果沒(méi)有匹配,就返回一個(gè) None。注意,這和找到一個(gè)零長(zhǎng)度匹配是不同的。
錦囊1 搜索第一個(gè)以“mr_”開頭的字符串
使用 search() 方法搜索第一個(gè)以“mr_”開頭的字符串,不區(qū)分字母大小寫,代碼如下:
import re # 導(dǎo)入正則表達(dá)式re模塊
pattern = r’mr_\w+’ # 模式字符串
string = ‘MR_SHOP mr_shop’ # 要匹配的字符串
match = re.search(pattern,string,re.I) # 搜索字符串,不區(qū)分大小寫
print(match) # 打印匹配結(jié)果
string = ‘項(xiàng)目名稱MR_SHOP mr_shop’
match = re.search(pattern,string,re.I) # 搜索字符串,不區(qū)分大小寫
print(match) # 打印匹配結(jié)果
程序運(yùn)行結(jié)果如下:
<re.Match object; span=(0, 7), match='MR_SHOP'>
<re.Match object; span=(4, 11), match='MR_SHOP'>
18. split()方法,根據(jù)正則表達(dá)式分割字符串
語(yǔ)法參考
split() 方法用于實(shí)現(xiàn)根據(jù)正則表達(dá)式分割字符串,并以列表的形式返回。其作用同字符串對(duì)象的 split() 方法類似,所不同的就是分割字符由模式字符串指定。語(yǔ)法格式如下:
re.split(pattern,string,maxsplit=0,flags=0)
參數(shù)說(shuō)明:
-
pattern :表示模式字符串,由要匹配的正則表達(dá)式轉(zhuǎn)換而來(lái)。
-
string :表示要匹配的字符串。
-
maxsplit :可選參數(shù),表示最大的拆分次數(shù)。
-
flags :可選參數(shù),表示標(biāo)志位,用于控制匹配方式,如是否區(qū)分字母大小寫。
-
返回值:返回一個(gè)分割后的字符串列表。
錦囊1 從給定的 URL 地址中提取出請(qǐng)求地址和各個(gè)參數(shù)
使用split()方法實(shí)現(xiàn)從給定的 URL 地址中提取出請(qǐng)求地址和各個(gè)參數(shù)的功能,代碼如下:
import re # 導(dǎo)入正則表達(dá)式re模塊
pattern = r’[?|&]’ # 定義分割符
url = ‘http://www.888.com/login.jsp?username=”mr”&pwd=”mrsoft”’
result = re.split(pattern,url) # 分割字符串
print(result)
程序運(yùn)行結(jié)果如下:
['http://www.888.com/login.jsp','username="mr"','pwd="mrsoft"']
19. sub()方法,字符串替換
語(yǔ)法參考
sub() 方法用于實(shí)現(xiàn)字符串替換。語(yǔ)法格式如下:
re.sub(pattern,repl,string,count=0,flags=0)52
參數(shù)說(shuō)明:
-
pattern :表示模式字符串,由要匹配的正則表達(dá)式轉(zhuǎn)換而來(lái)。
-
repl :表示替換的字符串。
-
string :表示要被查找替換的原始字符串。
-
count :可選參數(shù),表示模式匹配后替換的最大次數(shù),默認(rèn)值為 0,表示替換所有的匹配。
-
flags :可選參數(shù),表示標(biāo)志位,用于控制匹配方式,如是否區(qū)分字母大小寫。
-
返回值:返回替換后的字符串。
錦囊1 隱藏中獎(jiǎng)信息中的手機(jī)號(hào)碼
使用 sub() 方法實(shí)現(xiàn)隱藏中獎(jiǎng)信息中的手機(jī)號(hào)碼的功能,代碼如下:
import re # 導(dǎo)入正則表達(dá)式re模塊
pattern = r’1[34578]\d{9}’ # 定義要替換的模式字符串
string = ‘中獎(jiǎng)號(hào)碼為:84978981 聯(lián)系電話為:13611111111’
result = re.sub(pattern,’1XXXXXXXXXX’,string) # 替換字符串
print(result)
程序運(yùn)行結(jié)果如下:
中獎(jiǎng)號(hào)碼為:84978981 聯(lián)系電話為:1XXXXXXXXXX
錦囊2 排除字符串中的漢字、字母與數(shù)字
使用 sub() 方法排除字符串中的漢字、字母與數(shù)字,代碼如下:
import re
# 定義需要篩選的字符串
string = ‘a(chǎn)bcdefghijklmnopqrstuvwxyz我愛Python0123456789!#$%&*+-.^_`|~’
result = re.sub(“[A-Za-z0-9\u4e00-\u9fa5]”, ““, string) # 替換字符串
print(result) # 打印替換結(jié)果
程序運(yùn)行結(jié)果如下:
!#$%&*+-.^_`|~
20. subn()方法,字符串替換 (含替換次數(shù))
語(yǔ)法參考
subn() 方法與 sub() 方法相同,都是用于實(shí)現(xiàn)字符串的替換。但 subn() 方法返回一個(gè)元組,其中包含新字符串和替換次數(shù)。語(yǔ)法格式如下:
re.subn(pattern,repl,string,count=0,flags=0)
參數(shù)說(shuō)明:
-
pattern :表示模式字符串,由要匹配的正則表達(dá)式轉(zhuǎn)換而來(lái)。
-
repl :表示替換的字符串。
-
string :表示要被查找替換的原始字符串。
-
count :可選參數(shù),表示模式匹配后替換的最大次數(shù),默認(rèn)值為 0,表示替換所有的匹配。
-
flags :可選參數(shù),表示標(biāo)志位,用于控制匹配方式,如是否區(qū)分字母大小寫。
-
返回值:返回一個(gè)包含替換后字符串與替換次數(shù)的元組。
錦囊1 替換字符串中的指定內(nèi)容
使用 subn() 方法實(shí)現(xiàn)替換字符串中的指定內(nèi)容的功能,代碼如下:
import re # 導(dǎo)入正則表達(dá)式re模塊
print(re.subn(‘[1-2]’,’A’,’123456abcdef’)) # 打印元組,包含新字符串與替換次數(shù)
print(re.sub(‘g.t’,’have’,’I get A, I got B ,I gut C’)) # 打印新字符串
print(re.subn(‘g.t’,’have’,’I get A, I got B ,I gut C’)) # 打印元組,包含新字符串與替換次數(shù)
21. Pattern.flags屬性,獲取正則匹配標(biāo)記
語(yǔ)法參考
Pattern.flags 屬性用于獲取正則表達(dá)式中匹配模式對(duì)應(yīng)的標(biāo)記。語(yǔ)法格式如下:
Pattern.flags
錦囊1 獲取常見匹配模式對(duì)應(yīng)的標(biāo)記
使用 Pattern.flags 屬性獲取常見匹配模式對(duì)應(yīng)的標(biāo)記,代碼如下:
import re # 導(dǎo)入正則表達(dá)式re模塊
pattern_I = re.compile(‘\w+’,flags=re.I) # 匹配模式,忽略大小寫
pattern_M= re.compile(‘\w+’,flags=re.M) # 匹配模式,多行
pattern_S = re.compile(‘\w+’,flags=re.S) # 匹配模式,使用“.”字符匹配所有字符,包括換行符
pattern_X = re.compile(‘\w+’,flags=re.X) # 匹配模式,忽略模式字符串中未轉(zhuǎn)義的空格和注釋
print(‘匹配模式I的標(biāo)記為:',pattern_I.flags)
print(‘匹配模式M的標(biāo)記為:',pattern_M.flags)
print(‘匹配模式S的標(biāo)記為:',pattern_S.flags)
print(‘匹配模式X的標(biāo)記為:',pattern_X.flags)
22. Pattern.groups屬性,捕獲組合的數(shù)量
語(yǔ)法參考
Pattern.groups 屬性用于獲取正則表達(dá)式中組合的數(shù)量。語(yǔ)法格式如下:
Pattern.groups
錦囊1 獲取正則表達(dá)式中組合的數(shù)量
使用 Pattern.groups 屬性獲取正則表達(dá)式中組合的數(shù)量,代碼如下:
import re # 導(dǎo)入正則表達(dá)式re模塊
pattern = re.compile(‘(\w+) (\w+)’) # 組合表達(dá)式
print(‘組合數(shù)量為:',pattern.groups)
23. Pattern.groupindex屬性,獲取分組名稱與對(duì)應(yīng)的分組編號(hào)
語(yǔ)法參考
Pattern.groupindex 屬性用于獲取正則表達(dá)式中分組名稱與對(duì)應(yīng)的分組編號(hào)。語(yǔ)法格式如下:
Pattern.groupindex
錦囊1 獲取表達(dá)式中分組名稱與對(duì)應(yīng)的分組編號(hào)
使用 Pattern.groupindex 屬性獲取表達(dá)式中分組名稱與對(duì)應(yīng)的分組編號(hào),代碼如下:
import re # 導(dǎo)入正則表達(dá)式re模塊
pattern = re.compile(‘(?P<group_1>\w+) (?P<group_2>\w+)’) # 分組表達(dá)式
print(‘分組名稱與對(duì)應(yīng)的編號(hào)為:',pattern.groupindex)
程序運(yùn)行結(jié)果如下:
分組名稱與對(duì)應(yīng)的編號(hào)為: {'group_1': 1, 'group_2': 2}
24. Pattern.pattern屬性,獲取模式字符串
語(yǔ)法參考
Pattern.pattern 屬性用于獲取正則表達(dá)式中的模式字符串。語(yǔ)法格式如下:
Pattern.pattern
錦囊1 獲取表達(dá)式中的模式字符串
使用 Pattern.pattern 屬性獲取表達(dá)式中的模式字符串,代碼如下:
import re # 導(dǎo)入正則表達(dá)式re模塊
pattern = re.compile(‘(?P<group_1>\w+) (?P<group_2>\w+)’) # 分組表達(dá)式
print(pattern.pattern)
程序運(yùn)行結(jié)果如下:
(?P<group_1>\w+) (?P<group_2>\w+)
25. Pattern.f?indall()方法,搜索所有符合正則表達(dá)式的字符串
語(yǔ)法參考
Pattern.findall() 方法用于在整個(gè)字符串中搜索所有符合正則表達(dá)式的字符串,并以列表的形式返回。如果匹配成功,則返回包含匹配結(jié)構(gòu)的列表,否則返回空列表。該方法可以指定匹配字符串的范圍。語(yǔ)法格式如下:
Pattern.findall(string[,pos[,endpos]])
參數(shù)說(shuō)明:
-
string :表示需要匹配的字符串。
-
pos :表示匹配的起始位置,該參數(shù)為可選參數(shù),默認(rèn)值為 0。
-
endpos :表示匹配的結(jié)束位置,該參數(shù)為可選參數(shù),默認(rèn)為需要匹配字符串的長(zhǎng)度,所以只有從 pos 到 endpos-1 的字符會(huì)被匹配。
-
返回值:返回一個(gè)符合表達(dá)式匹配結(jié)果的列表。
錦囊1 搜索字符串中以“mr_”開頭的字符串
使用 Pattern.findall() 方法搜索字符串中以“mr_”開頭的字符串,代碼如下:
import re # 導(dǎo)入正則表達(dá)式re模塊
pattern = re.compile(‘mr_\w+’) # 正則表達(dá)式對(duì)象
string = ‘mr_SHOP mr_shop’ # 要匹配的字符串
match = pattern.findall(string) # 搜索字符串
print(match) # 打印匹配結(jié)果
print(pattern.findall(string,0,5)) # 打印下標(biāo)0~5的結(jié)果
程序運(yùn)行結(jié)果如下:
['mr_SHOP', 'mr_shop']
['mr_SH']
26. Pattern.f?inditer()方法,搜索所匹配的所有子串
語(yǔ)法參考
Pattern.finditer() 方法用于在字符串中找到正則表達(dá)式所匹配的所有子串,把它們作為一個(gè)迭代器返回。該方法可以指定匹配字符串的范圍。語(yǔ)法格式如下:
Pattern.finditer(string[,pos[,endpos]])
參數(shù)說(shuō)明:
-
string :表示需要匹配的字符串。
-
pos :表示匹配的起始位置,該參數(shù)為可選參數(shù),默認(rèn)值為 0。
-
endpos :表示匹配的結(jié)束位置,該參數(shù)為可選參數(shù),默認(rèn)為需要匹配字符串的長(zhǎng)度,所以只有從 pos 到 endpos-1 的字符會(huì)被匹配。
-
返回值:返回一個(gè)符合表達(dá)式匹配結(jié)果的迭代器。
錦囊1 獲取字符串中指定范圍的所有數(shù)字
使用 Pattern.finditer() 方法獲取字符串中指定范圍的所有數(shù)字,代碼如下:
import re # 導(dǎo)入正則表達(dá)式re模塊
pattern = re.compile(‘\d+’) # 正則表達(dá)式對(duì)象
string = ‘12a32bc43jf3’ # 要匹配的字符串
it = pattern.finditer(string,2,8)
# 遍歷獲取后的迭代對(duì)象
for match in it:
print (match.group()) # 打印數(shù)字
27. Pattern.fullmatch()方法,對(duì)整個(gè)字符串匹配
語(yǔ)法參考
Pattern.fullmatch() 方法用于對(duì)整個(gè)字符串匹配。從 pos 下標(biāo)位置開始逐個(gè)對(duì)字符串進(jìn)行匹配直到 endpos 下標(biāo)位置,如果匹配成功則返回匹配成功的 Match 對(duì)象;如果沒(méi)有匹配成功,就返回None。語(yǔ)法格式如下:
Pattern.fullmatch(string[,pos[,endpos]])
參數(shù)說(shuō)明:
-
string :表示需要匹配的字符串。
-
pos :表示匹配的起始位置,該參數(shù)為可選參數(shù),默認(rèn)值為 0。
-
endpos :表示匹配的結(jié)束位置,該參數(shù)為可選參數(shù),默認(rèn)為需要匹配字符串的長(zhǎng)度,所以只有從 pos 到 endpos-1 的字符會(huì)被匹配。
-
返回值:如果整個(gè) string 匹配到正則表達(dá)式樣式,就返回一個(gè)相應(yīng)的 Match 對(duì)象。
錦囊1 獲取字符串中開始處符合表達(dá)式的值
使用 Pattern.fullmatch() 方法獲取字符串中開始處符合表達(dá)式的值,代碼如下:
import re # 導(dǎo)入正則表達(dá)式re模塊
pattern = re.compile(‘[a-z]+’) # 定義匹配字母的表達(dá)式
string = ‘a(chǎn)bcskd123jaw123’ # 需要匹配的字符串
print(pattern.fullmatch(string,0,5)) # 打印匹配結(jié)果,匹配范圍0~5
程序運(yùn)行結(jié)果如下:
<re.Match object; span=(0, 5), match='abcsk'>
28. Pattern.match()方法,從字符開始處匹配字符串的值
語(yǔ)法參考
Pattern.match() 方法用于從字符開始處匹配字符串的值,從 pos 下標(biāo)位置開始逐個(gè)對(duì)字符串進(jìn)行匹配直到 endpos 下標(biāo)位置,如果匹配成功則返回匹配成功的 Match 對(duì)象;如果沒(méi)有匹配成功,就返回 None。語(yǔ)法格式如下:
Pattern.match(string[,pos[,endpos]])
參數(shù)說(shuō)明:
-
string :表示需要匹配的字符串。
-
pos :表示匹配的起始位置,該參數(shù)為可選參數(shù),默認(rèn)值為 0。
-
endpos :表示匹配的結(jié)束位置,該參數(shù)為可選參數(shù),默認(rèn)為需要匹配字符串的長(zhǎng)度,所以只有從 pos 到 endpos-1 的字符會(huì)被匹配。
-
返回值:如果 string 開始的位置可以匹配到正則表達(dá)式樣式,就返回一個(gè)相應(yīng)的 Match 對(duì)象。
錦囊 獲取字符串中開始處符合表達(dá)式的值
使用 Pattern.match() 方法獲取字符串中開始處符合表達(dá)式的值,代碼如下:
import re # 導(dǎo)入正則表達(dá)式re模塊
pattern = re.compile(‘[a-z]+’) # 定義匹配字母的表達(dá)式
string = ‘12312abc1234546lskdj’ # 需要匹配的字符串
print(pattern.match(string,5,10)) # 打印匹配結(jié)果,匹配范圍5~10
程序運(yùn)行結(jié)果如下:
<re.Match object; span=(5, 8), match='abc'>
29. Pattern.search()方法,搜索第一個(gè)匹配的位置
語(yǔ)法參考
Pattern.search() 方法用于搜索第一個(gè)匹配的位置,從 pos 下標(biāo)位置開始逐個(gè)對(duì)字符串進(jìn)行匹配直到 endpos 下標(biāo)位置,如果匹配成功,則返回匹配成功的 Match 對(duì)象,否則返回 None。語(yǔ)法格式如下:
Pattern.search(string[,pos[,endpos]])
參數(shù)說(shuō)明:
-
string :表示需要匹配的字符串。
-
pos :表示匹配的起始位置,該參數(shù)為可選參數(shù),默認(rèn)值為 0。
-
endpos :表示匹配的結(jié)束位置,該參數(shù)為可選參數(shù),默認(rèn)為需要匹配字符串的長(zhǎng)度,所以只有從 pos 到 endpos-1 的字符會(huì)被匹配。
-
返回值:掃描整個(gè)字符串找到匹配樣式的第一個(gè)位置,并返回一個(gè)相應(yīng)的匹配對(duì)象。
錦囊1 獲取字符串中第一個(gè)匹配值與位置
使用 Pattern.search() 方法獲取字符串中第一個(gè)匹配值與位置,代碼如下:
import re # 導(dǎo)入正則表達(dá)式re模塊
pattern = re.compile(‘[0-9]+’) # 定義匹配數(shù)字的表達(dá)式
string = ‘12312abc1234546lskdj’ # 需要匹配的字符串
print(pattern.search(string,0,10)) # 打印匹配結(jié)果,匹配范圍0~10
程序運(yùn)行結(jié)果如下:
<re.Match object; span=(0, 5), match='12312'>
30. Pattern.split()方法,同split()方法
語(yǔ)法參考
Pattern.split() 方法與 re.split() 方法相同,用于實(shí)現(xiàn)根據(jù)正則表達(dá)式分割字符串,并以列表的形式返回。其作用同字符串對(duì)象的 split() 方法類似,所不同的是分割字符由模式字符串指定。語(yǔ)法格式如下:
Pattern.split(string,maxsplit=0)
參數(shù)說(shuō)明:
-
string :表示需要匹配的字符串。
-
maxsplit :可選參數(shù),表示最大的拆分次數(shù)。
-
返回值:返回一個(gè)分割后的字符串列表。
錦囊1 從給定的 URL 地址中提取出請(qǐng)求地址和各個(gè)參數(shù)
使用 Pattern.split() 方法實(shí)現(xiàn)從給定的 URL 地址中提取出請(qǐng)求地址和各個(gè)參數(shù),代碼如下:
import re # 導(dǎo)入正則表達(dá)式re模塊
pattern = re.compile(‘[?|&]’) # 定義分割符
url = ‘http://www.888.com/login.jsp?username=”mr”&pwd=”999”’
result = pattern.split(url) # 分割字符串
print(result)
['http://www.888.com/login.jsp', 'username="mr"', 'pwd="999"']
31. Pattern.sub()方法,字符串替換
語(yǔ)法參考
Pattern.sub() 方法與 re.sub() 方法相同,用于實(shí)現(xiàn)字符串替換。語(yǔ)法格式如下:
Pattern.sub(repl,string,count=0)
參數(shù)說(shuō)明:
-
repl :表示替換的字符串。
-
string :表示要被查找替換的原始字符串。
-
count :可選參數(shù),表示模式匹配后替換的最大次數(shù),默認(rèn)值為 0,表示替換所有的匹配。
-
返回值:返回替換后的字符串。
錦囊1 隱藏中獎(jiǎng)信息中的手機(jī)號(hào)碼
使用 Pattern.sub() 方法實(shí)現(xiàn)隱藏中獎(jiǎng)信息中的手機(jī)號(hào)碼的功能,代碼如下:
import re # 導(dǎo)入正則表達(dá)式re模塊
pattern = re.compile(‘1[34578]\d{9}’) # 定義要替換的模式字符串
string = ‘中獎(jiǎng)號(hào)碼為:84978981 聯(lián)系電話為:13611111111’
result = pattern.sub(‘1XXXXXXXXXX’,string) # 替換字符串
print(result)
32. Pattern.subn()方法,字符串替換(含替換次數(shù))
語(yǔ)法參考
Pattern.subn() 方法與 re.subn() 方法相同,都是用于實(shí)現(xiàn)字符串的替換并返回一個(gè)元組,其中包含新字符串和替換次數(shù)。語(yǔ)法格式如下:
Pattern.subn(repl,string,count=0)
參數(shù)說(shuō)明:
-
repl :表示替換的字符串。
-
string :表示要被查找替換的原始字符串。
-
count :可選參數(shù),表示模式匹配后替換的最大次數(shù),默認(rèn)值為 0,表示替換所有的匹配。
-
返回值:返回一個(gè)包含替換后字符串與替換次數(shù)的元組。
錦囊 替換字符串中的指定內(nèi)容
使用 Pattern.subn() 方法實(shí)現(xiàn)替換字符串中的指定內(nèi)容的功能,代碼如下:
import re # 導(dǎo)入正則表達(dá)式re模塊
pattern = re.compile(‘[1-2]’) # 數(shù)值替換表達(dá)式,替換字符串中的1-2
pattern2 = re.compile(‘g.t’) # 字幕替換表達(dá)式,替換字符串中的get、got、gut
# 需要匹配的字符串
string = ‘123456abcdef’
string2 = ‘I get A, I got B ,I gut C’
print(pattern.subn(‘A’,string)) # 打印元組,包含新字符串與替換次數(shù)
print(pattern2.sub(‘have’,string2)) # 打印新字符串
print(pattern2.subn(‘have’,string2)) # 打印元組,包含新字符串與替換次數(shù)
33. Match.endpos屬性,結(jié)束匹配的索引位置
語(yǔ)法參考
Match.endpos 屬性用于獲取正則表達(dá)式在字符串結(jié)束匹配的索引位置。語(yǔ)法格式如下:
Match.endposdecimal
錦囊1 獲取正則表達(dá)式在字符串結(jié)束匹配的索引位置
使用 Match.endpos 屬性獲取正則表達(dá)式在字符串結(jié)束匹配的索引位置,代碼如下:
import re # 導(dǎo)入正則表達(dá)式re模塊
pattern = re.compile(‘mr_\w+’) # 分組表達(dá)式
string = ‘MR_SHOP mr_shop’ # 要匹配的字符串
match=re.search(pattern,string) # 匹配結(jié)果Match對(duì)象
print(match) # 打印匹配的Match對(duì)象
print(match.endpos) # 打印匹配的結(jié)束位置
程序運(yùn)行結(jié)果如下:
<re.Match object; span=(8, 15), match='mr_shop'>
15
34. Match.pos屬性,開始匹配的索引位置
語(yǔ)法參考
Match.pos 屬性用于獲取正則表達(dá)式在字符串開始匹配的索引位置。語(yǔ)法格式如下:
Match.pos
錦囊1 獲取正則表達(dá)式在字符串開始匹配的索引位置
使用 Match.pos 屬性獲取正則表達(dá)式在字符串開始匹配的索引位置,代碼如下:
import re # 導(dǎo)入正則表達(dá)式re模塊
pattern = re.compile(‘mr_\w+’) # 分組表達(dá)式
string = ‘MR_SHOP mr_shop’ # 要匹配的字符串
match=re.search(pattern,string) # 匹配結(jié)果Match對(duì)象
print(match) # 打印匹配的Match對(duì)象
print(match.pos) # 打印匹配的起始位置
程序運(yùn)行結(jié)果如下:
<re.Match object; span=(8, 15), match='mr_shop'>
0
35. Match.lastindex屬性,捕獲組的最后一個(gè)匹配的索引值
語(yǔ)法參考
Match.lastindex 屬性用于捕獲組的最后一個(gè)匹配的索引值。語(yǔ)法格式如下:
Match.lastindex
錦囊1 獲取最后一個(gè)匹配到的組所對(duì)應(yīng)的索引值
使用 Match.lastindex 屬性獲取最后一個(gè)匹配到的組所對(duì)應(yīng)的索引值,代碼如下:
import re # 導(dǎo)入正則表達(dá)式re模塊
pattern = re.compile(‘(?P<group_1>\w+) (?P<group_2>\w+)’,re.I) # 分組表達(dá)式
string = ‘MR_SHOP mr_shop’ # 要匹配的字符串
match=re.match(pattern,string) # 匹配結(jié)果Match對(duì)象
print(match.lastindex) # 打印最后一個(gè)匹配到的組所對(duì)應(yīng)的索引值
36. Match.lastgroup屬性,獲取最后一個(gè)匹配組的名稱
語(yǔ)法參考
Match.lastgroup 屬性用于獲取最后一個(gè)匹配組的名稱,如果匹配的組沒(méi)有名字或者沒(méi)有產(chǎn)生匹配的情況下,則返回 None。語(yǔ)法格式如下:
Match.lastgroup
錦囊1 獲取最后一個(gè)匹配組的名稱
使用 Match.lastgroup 屬性獲取最后一個(gè)匹配組的名稱,代碼如下:decimal
import re # 導(dǎo)入正則表達(dá)式re模塊
pattern = re.compile(‘(?P<group_1>\w+) (?P<group_2>\w+)‘,re.I) # 分組表達(dá)式
string = ‘MR_SHOP mr_shop‘ # 要匹配的字符串
match=re.match(pattern,string) # 匹配結(jié)果Match對(duì)象
print(match.lastgroup) # 打印最后一個(gè)匹配組的名稱
37. Match.re屬性,返回正則表達(dá)式對(duì)象
語(yǔ)法參考
Match.re 屬性用于獲取產(chǎn)生 Match 實(shí)例的正則表達(dá)式對(duì)象。語(yǔ)法格式如下:
Match.re
錦囊1 獲取產(chǎn)生 Match 實(shí)例的正則表達(dá)式對(duì)象
使用 Match.re 屬性獲取產(chǎn)生 Match 實(shí)例的正則表達(dá)式對(duì)象,代碼如下:
import re # 導(dǎo)入正則表達(dá)式re模塊
pattern = re.compile(‘(?P<group_1>\w+) (?P<group_2>\w+)‘,re.I) # 分組表達(dá)式
string = ‘MR_SHOP mr_shop‘ # 要匹配的字符串
match=re.match(pattern,string) # 匹配結(jié)果Match對(duì)象
print(match.re) # 打印獲取的表達(dá)式對(duì)象
程序運(yùn)行結(jié)果如下:
re.compile('(?P<group_1>\\w+) (?P<group_2>\\w+)', re.IGNORECASE)
38. Match.string屬性,獲取需要匹配的字符串
語(yǔ)法參考
Match.string 屬性用于獲取 Match 對(duì)象中需要匹配的字符串。語(yǔ)法格式如下:
Match.string
錦囊1 獲取 Match 對(duì)象中需要匹配的字符串
使用 Match.string 屬性獲取 Match 對(duì)象中需要匹配的字符串,代碼如下:
import re # 導(dǎo)入正則表達(dá)式re模塊
pattern = re.compile(‘(?P<group_1>\w+) (?P<group_2>\w+)‘,re.I) # 分組表達(dá)式
string = ‘MR_SHOP mr_shop‘ # 要匹配的字符串
match=re.match(pattern,string) # 匹配結(jié)果Match對(duì)象
print(match.string) # 打印Match對(duì)象中需要匹配的字符串
39. Match.__getitem__()方法,返回一個(gè)匹配的分組信息
語(yǔ)法參考
Match.__getitem__() 方法與 Match.group() 方法相似,只是 __getitem__() 方法每次只能獲取一個(gè)分組的信息。語(yǔ)法格式如下:
Match.__getitem__(g)
參數(shù)說(shuō)明:
-
g :表示分組對(duì)應(yīng)的編號(hào)或分組名稱。
-
返回值:返回一個(gè)匹配的分組信息。
錦囊1 獲取指定分組對(duì)應(yīng)的信息
使用 Match.getitem() 方法獲取指定分組對(duì)應(yīng)的信息,代碼如下:
import re # 導(dǎo)入正則表達(dá)式re模塊
pattern = re.compile(‘(?P<group_1>\w+) (?P<group_2>\w+)‘,re.I) # 分組表達(dá)式
string = ‘MR_SHOP mr_shop‘ # 要匹配的字符串
match=re.match(pattern,string) # 匹配結(jié)果Match對(duì)象
print(match.__getitem__(1)) # 打印指定分組編號(hào)對(duì)應(yīng)內(nèi)容
print(match.__getitem__(‘group_2’)) # 打印指定分組名對(duì)應(yīng)內(nèi)容
40. Match.end()方法,返回分組匹配字符串對(duì)應(yīng)的結(jié)束標(biāo)記
語(yǔ)法參考
Match.end() 方法用于獲取分組匹配字符串對(duì)應(yīng)的結(jié)束標(biāo)記。語(yǔ)法格式如下:
Match.end([group])
參數(shù)說(shuō)明:
-
group :表示分組名或者分組名對(duì)應(yīng)的編號(hào)。
-
返回值:返回分組匹配字符串對(duì)應(yīng)的結(jié)束標(biāo)記。
錦囊1 獲取分組匹配字符串對(duì)應(yīng)的開始、結(jié)束標(biāo)記
使用 Match.start() 方法與 Match.end() 方法獲取分組匹配字符串對(duì)應(yīng)的開始、結(jié)束標(biāo)記,代碼如下:文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-491258.html
import re # 導(dǎo)入正則表達(dá)式re模塊
pattern = re.compile(‘(?P<group_1>\w+) (?P<group_2>\w+)’,re.I) # 分組表達(dá)式
string = ‘MR_SHOP mr_shop’ # 要匹配的字符串
match=re.match(pattern,string) # 匹配結(jié)果Match對(duì)象
print(match.start(),match.end()) # 打印全部分組的匹配字符串對(duì)應(yīng)的開始、結(jié)束標(biāo)記
print(match.start(1),match.end(1)) # 打印編號(hào)1分組的匹配字符串對(duì)應(yīng)的開始、結(jié)束標(biāo)記
print(match.start(2),match.end(2)) # 打印編號(hào)2分組的匹配字符串對(duì)應(yīng)的開始、結(jié)束標(biāo)記
# 打印分組名的匹配字符串對(duì)應(yīng)的開始、結(jié)束標(biāo)記
print(match.start(‘group_1’),match.end(‘group_2’))
41. Match.expand()方法,對(duì)“\”進(jìn)行轉(zhuǎn)義替換并返回
語(yǔ)法參考
Match.expand() 方法用于實(shí)現(xiàn)把字符串中用反斜杠“\”表示的數(shù)字或組名替換為相應(yīng)分組中的值的功能。語(yǔ)法格式如下:
Match.expand(template)
參數(shù)說(shuō)明:
-
template :表示需要替換的字符串。
-
返回值:返回對(duì)“\”進(jìn)行轉(zhuǎn)義替換的結(jié)果。
錦囊1 在字符串中指定位置替換對(duì)應(yīng)分組中的值
使用 Match.expand() 方法,在字符串中指定位置替換對(duì)應(yīng)分組中的值,代碼如下:
import re # 導(dǎo)入正則表達(dá)式re模塊
pattern = re.compile(‘(?P<group_1>\w+) (?P<group_2>\w+)‘,re.I) # 分組表達(dá)式
string = ‘MR_SHOP mr_shop‘ # 要匹配的字符串
match=re.match(pattern,string) # 匹配結(jié)果Match對(duì)象
print(match[1]) # 打印分組1內(nèi)容
print(match[2 # 打印分組2內(nèi)容
# 第一種替換方式,\1、\2替換分組1和2的內(nèi)容
print(match.expand(r‘first_ \1 \2‘))
# 第二種替換方式,\g<1>、\g<2>替換分組1和2的內(nèi)容
print(match.expand(‘second_ \g<1> \g<2>‘))
# 第三種替換方式,\g<group_1>、\g<group_2>替換分組1和2的內(nèi)容
print(match.expand(‘third_ \g<group_1> \g<group_2>‘))
42. Match.groups()方法,以元組形式返回所有子組中內(nèi)容
語(yǔ)法參考
Match.groups() 方法用于獲取以元組形式返回所有子組中內(nèi)容。語(yǔ)法格式如下:
Match.groups(default=None)
參數(shù)說(shuō)明:
-
default :用于不參與匹配的情況,默認(rèn)為 None。
-
返回值:以元組形式返回所有子組中內(nèi)容。
錦囊1 獲取所有分組對(duì)應(yīng)的內(nèi)容
使用 Match.groups() 方法獲取所有分組對(duì)應(yīng)的內(nèi)容,代碼如下:
import re # 導(dǎo)入正則表達(dá)式re模塊
pattern = re.compile(‘(?P<group_1>\w+) (?P<group_2>\w+)’,re.I) # 分組表達(dá)式
string = ‘MR_SHOP mr_shop’ # 要匹配的字符串
match=re.match(pattern,string) # 匹配結(jié)果Match對(duì)象
print(match.groups()) # 打印所有分組對(duì)應(yīng)的內(nèi)容
43. Match.group()方法,返回一個(gè)或者多個(gè)匹配的子組
語(yǔ)法參考
Match.group() 方法用于獲取 Match 對(duì)象中一個(gè)或多個(gè)匹配的子組。如果只有一個(gè)(0~99)參數(shù),結(jié)果就是一個(gè)字符串;如果有多個(gè)參數(shù),結(jié)果就是一個(gè)元組(每個(gè)參數(shù)對(duì)應(yīng)一個(gè)項(xiàng));如果沒(méi)有參數(shù),組 1 默認(rèn)到 0(整個(gè)匹配都被返回)。如果一個(gè)組 N 參數(shù)值為 0,相應(yīng)的返回值就是整個(gè)匹配字符串;如果一個(gè)組號(hào)是負(fù)數(shù)或超出組的最大長(zhǎng)度,則給出越界錯(cuò)誤;如果正則表達(dá)式中的一個(gè)組匹配了多個(gè)值,則相應(yīng)的組只保存最后匹配的值。語(yǔ)法格式如下:
Match.group([group1, ...])
參數(shù)說(shuō)明:
-
group1 :表示分組對(duì)應(yīng)的編號(hào)或分組名稱。
-
返回值:返回一個(gè)或者多個(gè)匹配的子組。
錦囊 獲取指定分組對(duì)應(yīng)的信息
使用 Match.group() 方法獲取指定分組對(duì)應(yīng)的信息,代碼如下:
import re # 導(dǎo)入正則表達(dá)式re模塊
pattern = re.compile(‘(?P<group_1>\w+) (?P<group_2>\w+)’,re.I) # 分組表達(dá)式
string = ‘MR_SHOP mr_shop’ # 要匹配的字符串
match=re.match(pattern,string) # 匹配結(jié)果Match對(duì)象
print(match.group()) # 無(wú)參數(shù)打印全部?jī)?nèi)容
print(match.group(1)) # 打印指定分組編號(hào)對(duì)應(yīng)內(nèi)容
print(match.group(‘group_2’)) # 打印指定分組名對(duì)應(yīng)內(nèi)容
44. Match.groupdict()方法,返回包含所有匹配值分組的字典
語(yǔ)法參考
Match.groupdict()方法用于獲取以字典形式返回包含所有匹配值分組的信息,其中key就是組名,value 就是分組匹配的信息內(nèi)容。語(yǔ)法格式如下:
Match.groupdict(default=None)
參數(shù)說(shuō)明:
-
default :用于不參與匹配的情況,默認(rèn)為 None。
-
返回值:以字典形式返回包含所有匹配值分組的信息。
錦囊1 獲取字典形式的分組信息
使用 Match.groupdict() 方法獲取字典形式的分組信息,代碼如下:
import re # 導(dǎo)入正則表達(dá)式re模塊
pattern = re.compile(‘(?P<group_1>\w+) (?P<group_2>\w+)’,re.I) # 分組表達(dá)式
string = ‘MR_SHOP mr_shop’ # 要匹配的字符串
match=re.match(pattern,string) # 匹配結(jié)果Match對(duì)象
print(match.groupdict()) # 打印字典形式的分組信息
45. Match.span()方法,返回包含開始和結(jié)束位置的二元組
語(yǔ)法參考
Match.span() 方法用于獲取指定分組匹配字符串的開始和結(jié)束位置。語(yǔ)法格式如下:
Match.span([group])
參數(shù)說(shuō)明:
-
group :表示分組名或者分組名對(duì)應(yīng)的編號(hào)。
-
返回值:返回一個(gè)包含開始和結(jié)束位置的二元組。
錦囊1 獲取指定分組匹配字符串的開始和結(jié)束位置
使用 Match.span() 方法獲取指定分組匹配字符串的開始和結(jié)束位置,代碼如下:
import re # 導(dǎo)入正則表達(dá)式re模塊
pattern = re.compile(‘(?P<group_1>\w+) (?P<group_2>\w+)’,re.I) # 分組表達(dá)式
string = ‘MR_SHOP mr_shop’ # 要匹配的字符串
match=re.match(pattern,string) # 匹配結(jié)果Match對(duì)象
print(match.span(1)) # 打印分組編號(hào)1匹配字符串對(duì)應(yīng)的開始、結(jié)束標(biāo)記
print(match.span(‘group_2’)) # 打印分組名group_2匹配字符串對(duì)應(yīng)的開始、結(jié)束標(biāo)記
46. Match.start()方法,返回分組匹配字符串對(duì)應(yīng)的開始標(biāo)記
語(yǔ)法參考
Match.start() 方法用于獲取分組匹配字符串對(duì)應(yīng)的開始標(biāo)記。語(yǔ)法格式如下:
Match.start([group])
參數(shù)說(shuō)明:
-
group :表示分組名或者分組名對(duì)應(yīng)的編號(hào)。
-
返回值:返回分組匹配字符串對(duì)應(yīng)的開始標(biāo)記。文章來(lái)源:http://www.zghlxwxcb.cn/news/detail-491258.html
錦囊1 獲取分組匹配字符串對(duì)應(yīng)的開始、結(jié)束標(biāo)記
使用 Match.start() 方法與 Match.end() 方法獲取分組匹配字符串對(duì)應(yīng)的開始、結(jié)束標(biāo)記,代碼如下:
import re # 導(dǎo)入正則表達(dá)式re模塊
pattern = re.compile(‘(?P<group_1>\w+) (?P<group_2>\w+)’,re.I) # 分組表達(dá)式
string = ‘MR_SHOP mr_shop’ # 要匹配的字符串
match=re.match(pattern,string) # 匹配結(jié)果Match對(duì)象
print(match.start(),match.end()) # 打印全部分組的匹配字符串對(duì)應(yīng)的開始、結(jié)束標(biāo)記
print(match.start(1),match.end(1)) # 打印編號(hào)1分組的匹配字符串對(duì)應(yīng)的開始、結(jié)束標(biāo)記
print(match.start(2),match.end(2)) # 打印編號(hào)2分組的匹配字符串對(duì)應(yīng)的開始、結(jié)束標(biāo)記
# 打印分組名的匹配字符串對(duì)應(yīng)的開始、結(jié)束標(biāo)記
print(match.start(‘group_1’),match.end(‘group_2’))
到了這里,關(guān)于第二章 re模塊的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!