20171115 Python學習五周三次課

2022-08-03 11:21:14 字數 3838 閱讀 6312

今日任務:

五周三次課(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行業的似乎都是格仔襯衫,髮量少且髮際線高,駝背戴眼鏡,經常揹著雙肩包,中年油膩大叔,不懂浪漫沒有情調等等,這些都是程式設計師的標籤。對於圈外人來說,程式設計師可能是西裝革履,品質貓屎咖啡,喝著下午...