*和+在regex python中的行为不同

问题描述 投票:1回答:3

我正在使用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 =''

regex python-3.x
3个回答
1
投票

re.search将首先尝试查找从字符串开头开始的匹配项,并且仅在找不到匹配项时才推进起始位置。 [0-9]*模式确实匹配字符串开头的,它仅匹配零个字符(*匹配零个或多个)。


1
投票

*匹配零个或多个图案。在输入字符串的开头,:之前的数字为零。

[+匹配一个或多个模式,因此在到达3之前,它找不到匹配项,然后匹配所有数字。


1
投票

*表示匹配零个或多个时间,因此当您使用([0-9]*)时,它将匹配(捕获)空字符串,这也是为什么您获得Output: re.Match object; span=(0, 0), match=''

© www.soinside.com 2019 - 2024. All rights reserved.