今天在用正則時,發現match和group裏面一個很容易疏忽的點。
import re s= 'this is a number 23564-235-22-423' r=re.match('.+?(\d+-\d+-\d+-\d+)',s) #匹配 a=r.group(1) #提取 print(a)
運行結果:
23564-235-22-423
如果改成:
import re s= 'this is a number 23564-235-22-423' r=re.match('.+(\d+-\d+-\d+-\d+)',s) #匹配 a=r.group(1) #提取 print(a)
運行結果:
4-235-22-423
因爲
.+ 是匹配任意多個字符,再加?是非貪婪格式,所以第一段程序裏面.+?是非貪婪模式,只匹配了this is a number,使
(\d+-\d+-\d+-\d+)得到了滿足匹配形式的最多數字;第二段程序.+是貪婪模式,匹配了this is a number 2356,只讓(\d+-\d+-\d+-\d+)得到了滿足匹配形式的最少數字
如果group()內不填數字,則爲所有字符:
import re s= 'this is a number 23564-235-22-423' r=re.match('.+(\d+-\d+-\d+-\d+)',s) #匹配 a=r.group() #提取
print(a)
this is a number 23564-235-22-423