我有一个像
这样的字符串abcde1234_abcde
使用python re,我想提取1234_abcde
,有效字符串中至少包含1个数字,后跟_
(下划线)。
当我使用.*(?P<required>\d+\_.*)
时,结果不是4_abcde
<{1}} 1234_abcde
需要帮助。
答案 0 :(得分:3)
为什么不匹配:
\d+_.*
这将匹配一个或多个数字\d+
,然后是下划线_
,之后它会捕获所有内容,直到字符串或行的结尾。
如果您从星号的贪婪版本切换到不情愿的(懒惰)版本*?
,原始表达式将会起作用:
.*?(?P<required>\d+_.*)
答案 1 :(得分:0)
以下是解决方案:
re.match(r'.*?(?P<required>\d+\_.*)', 'abcde1234_abcde').group(1)
在原始表达式中,.*
没有?
之后会尝试尽可能多地匹配,因此您只能获得最后一位数字。
答案 2 :(得分:0)
尝试使用:
\D*(?P<required>\d+_.*)