我正在使用python re模块。我不明白为什么以下两个行为不同。我期望带有*的那个也会给出相同的结果。
re.search(r'([0-9]+)',':329392.899')
输出:re.Match对象; span =(1,7),match ='329392'
re.search('([0-9]*)',':329392.899')
输出:re.Match对象; span =(0,0),match =''
re.search
将首先尝试查找从字符串开头开始的匹配项,并且仅在找不到匹配项时才推进起始位置。 [0-9]*
模式确实匹配字符串开头的,它仅匹配零个字符(*
匹配零个或多个)。
*
匹配零个或多个图案。在输入字符串的开头,:
之前的数字为零。
[+
匹配一个或多个模式,因此在到达3
之前,它找不到匹配项,然后匹配所有数字。
*
表示匹配零个或多个时间,因此当您使用([0-9]*)
时,它将匹配(捕获)空字符串,这也是为什么您获得Output: re.Match object; span=(0, 0), match=''