例如,当我使用
regex.findall(r"(?e)(mazda2 standard){e<=1}", "mazda 2 standard")
,答案是[“马自达2标准版”]一如往常。
但是当我使用
regex.findall(r"(?e)(mazda2 standard|mazda 2){e<=1}", "mazda 2 standard")
或
regex.findall(r"(?e)(mazda2 standard|mazda 2){e<=1}", "mazda 2 standard", overlapped=True)
,输出完全不包含“马自达2标准版”。如何使输出也包含“马自达2标准”?
最佳答案
见PyPi regex documentation:
默认情况下,模糊匹配搜索满足给定约束的第一个匹配。ENHANCEMATCH
标志将使其尝试改善找到的匹配的匹配度(即减少错误数)。BESTMATCH
标志将使其搜索最佳匹配项。
您的代码会mazda 2
,因为此匹配不包含错误。
因此,使用BESTMATCH
标志(内联修饰符选项是(?b)
):
>>> import regex
>>> regex.findall(r"(?be)(mazda2 standard|mazda 2){e<=1}", "mazda 2 standard")
['mazda 2 standard']
>>>
关于python - 使用或运算子时,Python正则表达式的模糊搜索不会返回所有匹配项,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/43048183/