有幾個概念要先了解清楚。
函式:可以直接呼叫的實現特定功能的**塊。
方法:跟函式一樣是實現特定功能的**塊,但是方法跟函式有一點區別,就是方法需要被物件呼叫,而函式可以直接呼叫。
正規表示式物件:當使用compile函式,返回的就是乙個正規表示式物件。你也可以直接使用乙個字串來表示正規表示式,但最終字串會被編譯成正規表示式物件,而更有效的方法是使用compile函式對字串進行預編譯,有利於提公升執行效能。
匹配物件:當成功呼叫match或search方法,就會返回匹配物件,匹配物件有兩個主要方法group和groups。
group方法可以返回特定的子組,也可以方法整個匹配物件。
這個方法返回包含全部子組的元組。
match試圖從字串起始開始對模式進行匹配,匹配成功就返回匹配物件,失敗就返回none。
in [20]: r = re.match('foo', 'fooboo')
in [21]: print(r)
<_sre.sre_match object; span=(0, 3), match='foo'>
in [22]: r = re.match('foo', 'booboo')
in [23]: print(r)
none
如果匹配模式出現在字串中間部分而不是起始部分,就要用search而不是match,search會對字串進行搜尋第一次跟模式匹配的部分,匹配成功就返回匹配物件,失敗就返回none。
# 有兩部分跟模式匹配,只搜尋第一部分
in [26]: r = re.search('foo', 'seafooddfooc')
in [27]: r
out[27]: <_sre.sre_match object; span=(3, 6), match='foo'>
in [28]: r.group()
out[28]: 'foo'
查詢字串中模式匹配到的所有出現情況,返回乙個列表。
in [29]: re.findall('foo', 'dfooffoorbfoofooh')
out[29]: ['foo', 'foo', 'foo', 'foo']
finditer是與findall類似但更節省記憶體的變體,這個函式返回的是乙個迭代器。
in [39]: r = re.finditer('foo', 'dfooffoorbfoofooh')
in [40]: for i in r:
...: print(i.group())
...:
foofoo
foofoo
用於替換字串中與模式匹配的部分。
in [43]: re.sub('/', '-', '2018/1/1')
out[43]: '2018-1-1'
re.split是比普通字串split方法更強大的分割字串處理方式,可以通過定義正規表示式處理複雜的字串分割。
in [55]: s = 'mountain view, ca 94040'
in [56]: re.split(', | (?=\d|[a-z])', s)
out[56]: ['mountain view', 'ca', '94040']
# 以上主要參考《python核心程式設計》。 正規表示式re筆記
import re 1.re.match 只能從頭開始匹配 例如 ret re.match abc 123abc123abc 匹配abc失敗 ret re.match abc abc123 匹配abc成功 ret.span 返回匹配的索引範圍 0,2 ret.group 返回匹配的字元 abc 2....
python 正規表示式 re
match 和 search 的區別 match是從字串開頭匹配,而search是在整個字串中匹配。如 p re.compile a z p.match message none 因為開頭是 因此無法匹配 而 m p.search message print m re.matchobject ins...
python正規表示式 re
re.match 嘗試從字串的開始匹配乙個模式,如 下面的例子匹配第乙個單詞。import retext jgood is a handsome boy,he is cool,clever,and so on.m re.match r w s text ifm print m.group 0 n m...