为什么这个正则表达式:
>>> r = re.compile("[0-9]*", re.DEBUG)
像这样比赛:
>>> m = r.search("abc")
>>> m.group()
''
我希望它可以匹配整个字符串,'abc'
因为'a'
满足条件即匹配0位数字,然后贪婪的匹配将包括整个字符串'abc'
。
您询问“找到零个或多个数字”,因此它找到了零个或多个数字(零;空字符串)。
如果你想“找我零个或多个数字后跟零个或多个其它字符”,你需要说的是(与.*
模式)。'[0-9]*'
与不匹配 'abc'
,因为'abc'
包含了请求的表达式中未包含的字符(字母)。
>>> r = re.compile('[0-9]*.*') # Note the very important ".*" that matches everything!
>>> r.search('abc').group()
'abc'
关键是“匹配”一词。如果您的表达式不包含某个字符的表示(例如“ a”),则它可能与包含该字符的字符串不匹配!给定的表达式仅匹配由零个或多个数字组成的字符串,别无其他。因此,显然不匹配'abc'
。
正如Tigerhawk在评论中提到的那样,如果*
正则表达式的意思是“零个或多个前面的模式,或其他任何东西”,那将是无用的,因为其中带有a的任何模式*
将始终匹配所有字符串!
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句