今日任務:
五周三次課(11月15日)
11.4 re的matche方法和search方法
11.5 re的split,findall,finditer方法
11.6 re的match物件
match(string[, pos[, endpos]])
string:匹配使用的文字,
pos: 文字中正規表示式開始搜尋的索引。及開始搜尋string的下標
endpos: 文字中正規表示式結束搜尋的索引。
如果不指定pos,預設是從開頭開始匹配,如果匹配不到,直接返回none
import re
pattern = re.compile(r'\w*(hello w.*)(hello l.*)')
result = pattern.match(r'aahello world hello ling')
print(result)
result2 = pattern.match(r'hello world hello ling')
print(result2.groups())
結果:none
('hello world ', 'hello ling')
解釋:如果不指定pos的話,預設是從字串開始位置匹配,匹配不到就返回none,以上所有的pattern都是乙個match物件。
search方法
search(string[, pos[, endpos]])
這個方法用於查詢字串中可以匹配成功的子串。從string的pos下標處起嘗試匹配pattern,如果pattern結束時仍可匹配,則返回乙個match物件;若無法匹配,則將pos加1後重新嘗試匹配;直到pos=endpos時仍無法匹配則返回none。下面看個列子:
import re
pattern = re.compile(r'(hello w.*)(hello l.*)')
result1 = pattern.search(r'aahello world hello ling')
print(result1.groups())
結果:('hello world ', 'hello ling')
解釋:split方法
split(string[, maxsplit])
按照能夠匹配的子串將string分割後返回列表。maxsplit用於指定最大分割次數,不指定將全部分割。
import re
p = re.compile(r'\d+')
print(p.split('one1two2three3four4'))
結果:['one', 'two', 'three', 'four', '']
解釋:直接把p的正則當成是分隔符,然後把最後的字串用p進行分割,然後返回回去
findall方法
findall(string[, pos[, endpos]])
搜尋string,以列表形式返回全部能匹配的子串.
import re
p = re.compile(r'\d+')
print(findall('one1two2three3four4'))
結果:['1', '2', '3', '4']
結果:findall是把匹配到的字串最後一列表的形式返回回去
finditer方法
finditer(string[, pos[, endpos]])
搜尋string,返回乙個順序訪問每乙個匹配結果(match物件)的迭代器。
import re
p = re.compile(r'\d+')
print(type(p.finditer('one1two2three3four4')))
for m in p.finditer('one1two2three3four4'):
print(type(m))
print(m.group())
結果:解釋:
p.finditer('one1two2three3four4')是乙個迭代器,而返回的每個m都是match物件
sub方法
sub(repl, string[, count])
使用repl替換string中每乙個匹配的子串後返回替換後的字串。
當repl是乙個字串時,可以使用\id或\g、\g引用分組,但不能使用編號0。
當repl是乙個方法時,這個方法應當只接受乙個引數(match物件),並返回乙個字串用於替換(返回的字串中不能再引用分組)。
count用於指定最多替換次數,不指定時全部替換。
import re
p = re.compile(r'(\w+) (\w+)')
s = 'i say, hello world!'
print(p.sub(r'\2 \1', s))
def func(m):
return m.group(1).title() + ' ' + m.group(2).title()
print(p.sub(func, s))
結果:say i, world hello!
i say, hello world!
解釋:\(id)就是匹配的括號的內容,id從預設從1開始計數
m.group(1)是乙個字串,呼叫字串的title()方法,所有單詞的搜字母大寫。
match匹配物件
match物件是一次匹配的結果,包含了很多關於此次匹配的資訊,可以使用match提供的可讀屬性或方法來獲取這些資訊。上面的過程中多次使用了match物件,呼叫了他的group()和groups()等方法。
例子
import re
prog = re.compile(r'(?pabc)(.*)(?p=tagname)')
result1 = prog.match('abclfjlad234sjldabc')
print(result1)
print(result1.groups())
print result1.group('tagname')
print(result1.group(2))
print(result1.groupdict())
結果:<_sre.sre_match object at 0x0000000002176e88>
('abc', 'lfjlad234sjld')
abclfjlad234sjld
解釋:1,我們可以看到result1已經由字串轉換成了乙個正則物件。
2,resule.groups()可以檢視出來所有匹配到的資料,每個()是乙個元素,最終返回乙個tuple
3,group()既可以通過下標(從1開始)的方式訪問,也可以通過分組名進行訪問。
4,groupdict只能顯示有分組名的資料
group([group1, …]):
獲得乙個或多個分組截獲的字串;指定多個引數時將以元組形式返回。group1可以使用編號也可以使用別名;編號0代表整個匹配的子串;不填寫引數時,返回group(0);沒有截獲字串的組返回none;截獲了多次的組返回最後一次截獲的子串。
groups([default]):
以元組形式返回全部分組截獲的字串。相當於呼叫group(1,2,…last)。default表示沒有截獲字串的組以這個值替代,預設為none。
groupdict([default]):
返回以有別名的組的別名為鍵、以該組截獲的子串為值的字典,沒有別名的組不包含在內。default含義同上。
學python的遊戲app 學Python
基本內容 學python軟體中的python教學內容涵蓋基礎概念 控制結構 函式模組 檔案操作 面試物件 函式程式設計 異常處理 正規表示式。通過簡短的課程和有趣的小測驗進行python學習衝浪。在突破乙個個學習小關口,展示你的it程式設計技能。python教程,講解了python基礎知識,也介紹了...
手機學python好嗎 學Python怎麼樣?
第一,更高的工作效率 這兩年python在業內大火的原因除了雲計算幫python帶來的熱潮之外,更多的是本身的特性。目前網際網路創業熱情高漲,創業者和投資者都希望投資回報週期快。因此,一門開發效率極高的語言就此進入開發者眼簾,眾多創業公司 python做為開發語言,催生了python在國內大熱的現象...
女生學python 女生適合學Python嗎?
學習程式設計對於性別沒有什麼特別強制的要求,不管是男生還是女生,都是可以的。可能在圈外行業來說,從事it行業的似乎都是格仔襯衫,髮量少且髮際線高,駝背戴眼鏡,經常揹著雙肩包,中年油膩大叔,不懂浪漫沒有情調等等,這些都是程式設計師的標籤。對於圈外人來說,程式設計師可能是西裝革履,品質貓屎咖啡,喝著下午...