python~正則表示式總結三
目錄
pattern物件的屬性
flags屬性:
該屬性表示獲取編譯時用的匹配模式,數字形式
>>> p=re.compile(r"\d+",re.I)
>>> p.flags
34
>>> p=re.compile(r"\d+",re.M)
>>> p.flags
40
>>> p=re.compile(r"\d+",re.S)
>>> p.flags
48
groups屬性:
該屬性表示獲取表示式中分組的數量
>>> pattern=re.compile(r"\d+") >>> pattern.groups 0 >>> pattern=re.compile(r"(\d+)(\w+)") >>> pattern.groups 2
groupindex屬性:
以表示式中有別名的組的別名為鍵、以該組對應的編號為值的字典,沒有別名的組不包含在 內
>>> pattern=re.compile(r"(\d+)(\w+)") >>> pattern.groupindex mappingproxy({}) >>> p=re.compile(r"(?P<group1>\d+)(?P<group2>\w+)") >>> p.groupindex mappingproxy({'group1': 1, 'group2': 2})
Match物件的屬性
Match物件是一次匹配後的結果,它包含了很多關於此次匹配的資訊,可以使用Match提供 的可讀屬性或方法來獲取這些資訊。
string 屬性:
獲取匹配時使用的字串物件
>>> import re
>>> re.match(r"\w+","ab21").string
'ab21'
re屬性:
匹配時使用的pattern物件,也就是匹配到內容的正則表示式物件
>>> import re
>>> re.match(r"\D+","ab21").re
re.compile('\\D+')
pos屬性:
該屬性表示文字中正則表示式開始搜尋的索引
>>> import re
>>> re.match(r"\D+","ab21").pos
0
endpos屬性:
該屬性表示文字中正則表示式結束搜尋的索引
>>> import re
>>> re.match(r"\D+","ab21").endpos
4
lastindex屬性:
該屬性表示最後一個被捕獲的分組在文字中的索引。如果沒有被捕獲的分組,將為None
>>> import re
>>> m=re.match(r"(\w+)!(\w+)(?P<sign>.*)","Hi!gloryroad!")
>>> m.lastindex
3
>>> m.group(3)
'!'
lastgroup屬性:
該屬性表示最後一個被捕獲的分組別名。如果這個分 組沒有別名或者沒有被捕獲的分組,將為None
>>> import re
>>> m=re.match(r"(\w+)!(\w+)(?P<sign>.*)","Hi!gloryroad!")
>>> m.lastgroup
'sign'
>>> t=re.match(r"\d+","123")
>>> t.lastgroup
>>> print (t.lastgroup)
None
>>> print (t.lastindex)
None
group([group1, ...]):
獲得一個或多個分組截獲的字串;指定多個引數時將以元組形式返回。group可以使用編號也可以使用別名;編號0代表匹配的整個子串,預設返回group(0);沒有截獲字串的組返回None;截獲了多次的則返回最後一次截獲的子串
import re
p=re.compile("[a-z]+\s(\d)(\w)")
result=p.search("aa 1w31")
print (result)
if result:
print ("整個匹配結果為%s"% result.group())
print ("整個匹配結果為%s" % result.group(0))
print ("第一個分組內容為%s" % result.group(1))
print ("第二個分組內容為%s" % result.group(2))
group函式使用編號和分組別名
import re
matchResult=re.search(r'(a(b)c)d','abcdefg')
print (matchResult.group())
print (matchResult.group(1))
print (matchResult.group(2))
>>> result=re.search(r"(?P<word>\w+)(?P<num>\d)","hello4")
>>> result.group("word")
'hello'
>>> result.group("num")
'4'
group函式傳多個引數時,以元組的形式返回
import re
p = re.compile('(a(b)c)d')
m = p.match('abcd')
resTup = m.group(1,2)
print (resTup)
>>> t=re.match(r"\d+","123")
>>> m.group(1,2)
('Hi', 'gloryroad')
groups([default=None]):
以元組形式返回全部分組截獲的字串,相當於呼叫group(1,2,…last)。沒有截獲字串的組以預設值 None代替
import re
p = re.compile('(a(b)c)d')
m = p.match('abcd')
resTup = m.groups()
print (resTup)
start([group=0]):
返回指定的組截獲的子串在string中的起始索引(子串第一個字元的索引)。預設為第0組
>>> import re
>>> m=re.match(r"(\w+)(\d)(\w+)","abc3def")
>>> m.groups()
('abc', '3', 'def')print (resTup)
>>> m.start(1)
0
>>> m.start(2)
3
end([group=0]):
返回指定的組截獲的子串在string中的結束索引(子串最後一個字元的索引)。group預設值 為0
>>> m = re.search(r'(\w+)! (\w+) (\w+)','HMan! gloryroad train')
>>> m.group()
'HMan! gloryroad train'
>>> m.group(1)
'HMan'
>>> m.group(1)
'HMan'
>>> m.group(2)
'gloryroad'
>>> m.group(3)
'train'
>>> m.end() #獲取第三個分組被匹配內容的最後一個字母在被匹配字串的索引位置
21
>>> len('HMan! gloryroad train')
21
>>> m.end(2) #獲取第二個分組被匹配內容的最後一個字母在被匹配字串的索引位置
15
span([group]):
該方法表示以元組的形式返回 (start(group), end(group)),即某個分組的匹配文字內容在被匹配字串的開始索引位置和結束索引位置
import re
m = re.search(r'(\w+)! (\w+) (\w+)','HMan! gloryroad train')
print (m.group(1),m.group(2),m.group(3))
print (m.span())
print (m.span(1))
print (m.span(2))
print (m.span(3))
groupdict([default=None]):
該函式的作用是,將所有匹配到並且指定了別名的分組,以別名為key,匹配到的字串為value,存於字典中,然後返回這個字典。如果表示式中未設定別名分組,就會返回一個空字典
import re
line = "This is the last one"
res = re.match( r'(?P<group1>.*) is (?P<group2>.*?) .*', line, re.M|re.I)
groupDict = res.groupdict()
if groupDict:
print (groupDict)
else :
print ("無別名分組")
>>> m=re.search(r"\d+","123")
>>> m.groupdict()
{}