带有可选参数的python re.search

时间:2015-10-29 18:53:01

标签: python regex python-3.x

我正在尝试使用此模式查找子字符串:.*(_\d+)?

示例:

abc_4
abc_345
abc

只需一个常规字符串,然后是可选的" _",后跟至少一个数字。

但是当我使用时:

re.search("(.*)(_\d+)?" , str).group(1)

它总是返回整个字符串。

3 个答案:

答案 0 :(得分:1)

而非[^_]*?使用_停在第一个_nnn字符处。

答案 1 :(得分:1)

您已将?部分设为可选(.*),因此.*?(_\d+)? 始终匹配整个字符串(贪婪)。让它不贪婪:

mystring

答案 2 :(得分:0)

问题是*是贪婪的,它试图匹配最长的字符串,只要正则表达式的其余部分可以匹配。由于_之后的部分是可选的,.*可以吞噬它,因为正则表达式的其余部分可以匹配空字符串。

.*更改为[^_]*,使其与数字前的下划线不匹配。

([^]*)(_\d+)?