正则表达式 Findall 在第一次出现时停止搜索
Regular Expression Findall Stopping Search in First Occur
我正在尝试使用 RegEx 查找某个字符串。
我想找到 "something starting with 'f' and ending with first 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)
问题是您的正则表达式包含一个 \w*
模式,该模式也可以匹配相邻的 2
模式。有两种方法可以实现您的需要:1)使用 rock321987 建议的惰性量词,以及 2)在否定字符 class [=13= 中使用反向 shorthand char class ] 并且也否定 2
.
因此,使用
f[^\W2]*2
[^\W2]*
模式匹配非单词字符以外的零个或多个字符(因此,它匹配所有单词字符)和 2
.
以外的字符
注意:此处贪心匹配比惰性匹配快
我正在尝试使用 RegEx 查找某个字符串。
我想找到 "something starting with 'f' and ending with first 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)
问题是您的正则表达式包含一个 \w*
模式,该模式也可以匹配相邻的 2
模式。有两种方法可以实现您的需要:1)使用 rock321987 建议的惰性量词,以及 2)在否定字符 class [=13= 中使用反向 shorthand char class ] 并且也否定 2
.
因此,使用
f[^\W2]*2
[^\W2]*
模式匹配非单词字符以外的零个或多个字符(因此,它匹配所有单词字符)和 2
.
注意:此处贪心匹配比惰性匹配快