使用 Python 的新正则表达式模块创建模糊匹配异常



我正在测试新的python regex模块,它允许模糊字符串匹配,到目前为止,它的功能给我留下了深刻印象。然而,我在模糊匹配中遇到了一些例外。以下是一个很好的例子。我希望ST LOUIS和编辑距离1内的ST LOUIS的所有变体与ref匹配。但是,我想对这个规则做一个例外:编辑不能包括插入到最左边的包含字母NSEW的字符的左边。在下面的例子中,我希望输入1-3与ref匹配,而输入4失败。但是,使用以下ref会使其与所有四个输入匹配。熟悉新regex模块的人知道可能的解决方法吗?

input1 = 'ST LOUIS'
input2 = 'AST LOUIS'
input3 = 'ST LOUS'
input4 = 'NST LOUIS'

ref = '([^NSEW]|(?<=^))(ST LOUIS){e<=1}'
match = regex.fullmatch(ref,input1)
match
<_regex.Match object at 0x1006c6030>
match = regex.fullmatch(ref,input2)
match
<_regex.Match object at 0x1006c6120>
match = regex.fullmatch(ref,input3)
match
<_regex.Match object at 0x1006c6030>
match = regex.fullmatch(ref,input4)
match
<_regex.Match object at 0x1006c6120>

尝试负面前瞻:

(?![NEW]|SS)(ST LOUIS){e<=1}

(ST LOUIS){e<=1}匹配满足其上所设置的模糊条件的字符串。您希望阻止它从[NSEW]开始。消极的前瞻会对你造成(?![NSEW])。但是您想要的字符串已经以S开头,您只想排除以添加到字符串开头的S开头的字符串。这样的字符串将以SS开头,这就是为什么它被添加到负前瞻中。

请注意,如果您允许错误>1,这可能无法按要求工作。

最新更新