【问题标题】:Regular Expression Findall Stopping Search in First Occur正则表达式 Findall 在第一次出现时停止搜索
【发布时间】:2016-09-28 11:02:03
【问题描述】:

我正在尝试使用 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)

【问题讨论】:

标签: python regex search find findall


【解决方案1】:

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

因此,使用

f[^\W2]*2

regex demo

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

注意:这里贪婪匹配比惰性匹配要快。

【讨论】:

    猜你喜欢
    • 2021-01-26
    • 1970-01-01
    • 2012-07-03
    • 1970-01-01
    • 2022-12-03
    相关资源
    最近更新 更多