新聞中心
re模塊是python獨(dú)有的匹配字符串的模塊,該模塊中提供的很多功能是基于正則表達(dá)式實(shí)現(xiàn)的,而正則表達(dá)式是對(duì)字符串進(jìn)行模糊匹配,提取自己需要的字符串部分,他對(duì)所有的語(yǔ)言都通用

創(chuàng)新互聯(lián)公司專(zhuān)業(yè)為企業(yè)提供蔡家坡網(wǎng)站建設(shè)、蔡家坡做網(wǎng)站、蔡家坡網(wǎng)站設(shè)計(jì)、蔡家坡網(wǎng)站制作等企業(yè)網(wǎng)站建設(shè)、網(wǎng)頁(yè)設(shè)計(jì)與制作、蔡家坡企業(yè)網(wǎng)站模板建站服務(wù),10余年蔡家坡做網(wǎng)站經(jīng)驗(yàn),不只是建網(wǎng)站,更提供有價(jià)值的思路和整體網(wǎng)絡(luò)服務(wù)。
語(yǔ)法:
re.sub(pattern, repl, string, count=0, flags=0)
參數(shù):
| pattern : 正則中的模式字符串 | |
|---|---|
| repl : 替換的字符串,也可為一個(gè)函數(shù) | |
| string : 要被查找替換的原始字符串 | |
| count : 模式匹配后替換的最大次數(shù),默認(rèn) 0 表示替換所有的匹配 | |
| flags : 編譯時(shí)用的匹配模式,數(shù)字形式 |
前三個(gè)為必選參數(shù),后兩個(gè)為可選參數(shù)。
實(shí)例
#!/usr/bin/python3
import re
phone = "2004-959-559 # 這是一個(gè)電話(huà)號(hào)碼"
# 刪除注釋
num = re.sub(r'#.*$', "", phone)
print ("電話(huà)號(hào)碼 : ", num)
# 移除非數(shù)字的內(nèi)容
num = re.sub(r'\D', "", phone)
print ("電話(huà)號(hào)碼 : ", num)
以上實(shí)例執(zhí)行結(jié)果如下:
電話(huà)號(hào)碼 : 2004-959-559
電話(huà)號(hào)碼 : 2004959559
repl 參數(shù)是一個(gè)函數(shù)
以下實(shí)例中將字符串中的匹配的數(shù)字乘于 2:
實(shí)例
#!/usr/bin/python
import re
# 將匹配的數(shù)字乘于 2
def double(matched):
value = int(matched.group('value'))
return str(value * 2)
s = 'A23G4HFD567'
print(re.sub('(?P\d+)', double, s))
執(zhí)行輸出結(jié)果為:
A46G8HFD1134
compile 函數(shù)
compile 函數(shù)用于編譯正則表達(dá)式,生成一個(gè)正則表達(dá)式( Pattern )對(duì)象,供 match() 和 search() 這兩個(gè)函數(shù)使用。
語(yǔ)法格式為:
re.compile(pattern[, flags])
參數(shù):
pattern : 一個(gè)字符串形式的正則表達(dá)式
flags 可選,表示匹配模式,比如忽略大小寫(xiě),多行模式等,具體參數(shù)為: re.I 忽略大小寫(xiě) re.L 表示特殊字符集 \w, \W, \b, \B, \s, \S 依賴(lài)于當(dāng)前環(huán)境
re.M 多行模式
re.S 即為’ . ‘并且包括換行符在內(nèi)的任意字符(’ . ‘不包括換行符)
re.U 表示特殊字符集 \w, \W, \b, \B, \d, \D, \s, \S 依賴(lài)于 Unicode 字符屬性數(shù)據(jù)庫(kù)
re.X 為了增加可讀性,忽略空格和’ # ‘后面的注釋
實(shí)例
實(shí)例
>>>import re
>>> pattern = re.compile(r'\d+') # 用于匹配至少一個(gè)數(shù)字
>>> m = pattern.match('one12twothree34four') # 查找頭部,沒(méi)有匹配
>>> print m
None
>>> m = pattern.match('one12twothree34four', 2, 10) # 從'e'的位置開(kāi)始匹配,沒(méi)有匹配
>>> print m
None
>>> m = pattern.match('one12twothree34four', 3, 10) # 從'1'的位置開(kāi)始匹配,正好匹配
>>> print m # 返回一個(gè) Match 對(duì)象
<_sre.sre_match>
>>> m.group(0) # 可省略 0
'12'
>>> m.start(0) # 可省略 0
3
>>> m.end(0) # 可省略 0
5
>>> m.span(0) # 可省略 0
(3, 5)
在上面,當(dāng)匹配成功時(shí)返回一個(gè) Match 對(duì)象,其中:
group([group1, …]) 方法用于獲得一個(gè)或多個(gè)分組匹配的字符串,當(dāng)要獲得整個(gè)匹配的子串時(shí),可直接使用 group() 或 group(0); start([group]) 方法用于獲取分組匹配的子串在整個(gè)字符串中的起始位置(子串第一個(gè)字符的索引),參數(shù)默認(rèn)值為 0; end([group]) 方法用于獲取分組匹配的子串在整個(gè)字符串中的結(jié)束位置(子串最后一個(gè)字符的索引+1),參數(shù)默認(rèn)值為 0; span([group]) 方法返回 (start(group), end(group))。 再看看一個(gè)例子:
實(shí)例
>>>import re
>>> pattern = re.compile(r'([a-z]+) ([a-z]+)', re.I) # re.I 表示忽略大小寫(xiě)
>>> m = pattern.match('Hello World Wide Web')
>>> print m # 匹配成功,返回一個(gè) Match 對(duì)象
<_sre.sre_match>
>>> m.group(0) # 返回匹配成功的整個(gè)子串
'Hello World'
>>> m.span(0) # 返回匹配成功的整個(gè)子串的索引
(0, 11)
>>> m.group(1) # 返回第一個(gè)分組匹配成功的子串
'Hello'
>>> m.span(1) # 返回第一個(gè)分組匹配成功的子串的索引
(0, 5)
>>> m.group(2) # 返回第二個(gè)分組匹配成功的子串
'World'
>>> m.span(2) # 返回第二個(gè)分組匹配成功的子串索引
(6, 11)
>>> m.groups() # 等價(jià)于 (m.group(1), m.group(2), ...)
('Hello', 'World')
>>> m.group(3) # 不存在第三個(gè)分組
Traceback (most recent call last):
File "", line 1, in
IndexError: no such group
findall
在字符串中找到正則表達(dá)式所匹配的所有子串,并返回一個(gè)列表,如果沒(méi)有找到匹配的,則返回空列表。
注意: match 和 search 是匹配一次 findall 匹配所有。
語(yǔ)法格式為:
re.findall(string[, pos[, endpos]])
參數(shù):
| pattern : 正則中的模式字符串 | |
|---|---|
| repl : 替換的字符串,也可為一個(gè)函數(shù) | |
| string : 要被查找替換的原始字符串 | |
| count : 模式匹配后替換的最大次數(shù),默認(rèn) 0 表示替換所有的匹配 | |
| flags : 編譯時(shí)用的匹配模式,數(shù)字形式 |
string 待匹配的字符串。 pos 可選參數(shù),指定字符串的起始位置,默認(rèn)為 0。 endpos 可選參數(shù),指定字符串的結(jié)束位置,默認(rèn)為字符串的長(zhǎng)度。 查找字符串中的所有數(shù)字:
實(shí)例
import re
pattern = re.compile(r'\d+') # 查找數(shù)字
result1 = pattern.findall('runoob 123 google 456')
result2 = pattern.findall('run88oob123google456', 0, 10)
print(result1)
print(result2)
輸出結(jié)果:
['123', '456']
['88', '12']
re.finditer
和 findall 類(lèi)似,在字符串中找到正則表達(dá)式所匹配的所有子串,并把它們作為一個(gè)迭代器返回。
re.finditer(pattern, string, flags=0)
參數(shù):
| 參數(shù) | 描述 | |
|---|---|---|
| pattern | 匹配的正則表達(dá)式 | |
| string | 要匹配的字符串 | |
| flags | 標(biāo)志位,用于控制正則表達(dá)式的匹配方式,如:是否區(qū)分大小寫(xiě),多行匹配等等。參見(jiàn):正則表達(dá)式修飾符 – 可選標(biāo)志 |
實(shí)例
import re
it = re.finditer(r"\d+","12a32bc43jf3")
for match in it:
print (match.group() )
輸出結(jié)果:
12
32
43
3
re.split
split 方法按照能夠匹配的子串將字符串分割后返回列表,它的使用形式如下:
re.split(pattern, string[, maxsplit=0, flags=0])
參數(shù):
| 參數(shù) | 描述 | |
|---|---|---|
| pattern | 匹配的正則表達(dá)式 | |
| string | 要匹配的字符串 | |
| maxsplit | 分隔次數(shù),maxsplit=1 分隔一次,默認(rèn)為 0,不限制次數(shù) | |
| flags | 標(biāo)志位,用于控制正則表達(dá)式的匹配方式,如:是否區(qū)分大小寫(xiě),多行匹配等等。參見(jiàn):正則表達(dá)式修飾符 – 可選標(biāo)志 |
實(shí)例
>>>import re
>>> re.split('\W+', 'runoob, runoob, runoob.')
['runoob', 'runoob', 'runoob', '']
>>> re.split('(\W+)', ' runoob, runoob, runoob.')
['', ' ', 'runoob', ', ', 'runoob', ', ', 'runoob', '.', '']
>>> re.split('\W+', ' runoob, runoob, runoob.', 1)
['', 'runoob, runoob, runoob.']
>>> re.split('a*', 'hello world') # 對(duì)于一個(gè)找不到匹配的字符串而言,split 不會(huì)對(duì)其作出分割
['hello world']
本文標(biāo)題:通過(guò)pythonre模塊進(jìn)行檢索和替換
分享地址:http://www.5511xx.com/article/cdpejpg.html


咨詢(xún)
建站咨詢(xún)
