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