正则表达式Findall首次停止搜索

时间:2016-05-30 14:56:46

标签: python regex search find findall

我正在尝试使用RegEx找到某个字符串。 我想找到“以'f'开头并以前2开头的东西”(它必须只包含一个2)。在这个例子中,我想找到result = "fdba12",但下面的代码给了我'fdba12312'(包含两个2)。当我立即找到2时,如何停止搜索?

import re
string2 = "asfdba12312 sssdr1 12şljş1 kf"

t = re.findall(r'[f][\w]*[2]', string2 )
print(t)

1 个答案:

答案 0 :(得分:1)

问题是您的正则表达式包含\w*模式,该模式也可以匹配相邻的2模式。有两种方法可以实现你所需要的:1)使用rock321987建议的惰性量词,2)在否定的字符类[^...]中使用反向速记char类,并否定2

因此,请使用

f[^\W2]*2

请参阅regex demo

[^\W2]*模式匹配除非单词字符以外的零个或多个字符(因此,它匹配所有单词字符)和2以外的字符。

注意:贪婪匹配比这里的延迟匹配更快。