例如,当我使用

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/

10-12 23:48