我正在尝试使用此模式查找子字符串:.*(_\d+)?
示例:
abc_4
abc_345
abc
只需一个常规字符串,然后是可选的" _",后跟至少一个数字。
但是当我使用时:
re.search("(.*)(_\d+)?" , str).group(1)
它总是返回整个字符串。
答案 0 :(得分:1)
而非[^_]*?
使用_
停在第一个_nnn
字符处。
答案 1 :(得分:1)
您已将?
部分设为可选(.*
),因此.*?(_\d+)?
始终匹配整个字符串(贪婪)。让它不贪婪:
mystring
答案 2 :(得分:0)
问题是*
是贪婪的,它试图匹配最长的字符串,只要正则表达式的其余部分可以匹配。由于_
之后的部分是可选的,.*
可以吞噬它,因为正则表达式的其余部分可以匹配空字符串。
将.*
更改为[^_]*
,使其与数字前的下划线不匹配。
([^]*)(_\d+)?