python RE match物件 m.group(0)可以輸出 m.group(1)為啥不可以輸出第二個呢?
阿新 • • 發佈:2018-11-25
import re
match = re.search(r’[1-9]\d{5}’ ,‘BIT233189’)
if match:
… print(match.group(0))
…
233189
import re
m = re.search(r’[1-9]\d{5}’, ‘bvcdh345678 jiki876989’)
m.string
‘bvcdh345678 jiki876989’m.re
re.compile(’[1-9]\d{5}’)m.pos
0m.endpos
22
m.group(0)
‘345678’m.start(0)
5m.end(0)
11m.span(0)
(5, 11)
m.group(0)可以輸出 m.group(1)為啥不可以輸出第二個呢?
group和groups是兩個不同的函式。一般,m.group(N) 返回第N組括號匹配的字元。而m.group() == m.group(0) == 所有匹配的字元,與括號無關,這個是API規定的。m.groups() 返回所有括號匹配的字元,以tuple格式。m.groups() == (m.group(0), m.group(1), …)
正則表示式中,group()用來提取分組截獲的字串,()用來分組。
組是通過 “(” 和 “)” 元字元來標識的。 “(” 和 “)” 有很多在數學表示式中相同的意思;它們一起把在它們裡面的表示式組成一組。舉個例子,你可以用重複限制符,象 , +, ?, 和 {m,n},來重複組裡的內容,比如說(ab)
如果不引入括號,整個個表示式作為一個組,是group(0)
對於題目中的例子:m = re.match("([abc])+", “abc”)+號在括號外面。括號最多匹配到一個字元,要麼是a, 要麼是c,這個python引擎匹配的是末尾的c。而m.group() == m.group(0) 這個返回的是整個匹配的字串"abc".