正则表达式出错,无法从字符串中提取必填字段

时间:2013-11-07 14:57:55

标签: regex python-2.7

我有一个像

这样的字符串
abcde1234_abcde

使用python re,我想提取1234_abcde,有效字符串中至少包含1个数字,后跟_ (下划线)

当我使用.*(?P<required>\d+\_.*)时,结果不是4_abcde <{1}} 1234_abcde

需要帮助。

3 个答案:

答案 0 :(得分:3)

为什么不匹配:

\d+_.*

这将匹配一个或多个数字\d+,然后是下划线_,之后它会捕获所有内容,直到字符串或行的结尾。

如果您从星号的贪婪版本切换到不情愿的(懒惰)版本*?,原始表达式将会起作用:

 .*?(?P<required>\d+_.*)

Regex101 Demo

答案 1 :(得分:0)

以下是解决方案:

 re.match(r'.*?(?P<required>\d+\_.*)', 'abcde1234_abcde').group(1)

在原始表达式中,.*没有?之后会尝试尽可能多地匹配,因此您只能获得最后一位数字。

答案 2 :(得分:0)

尝试使用:

\D*(?P<required>\d+_.*)