使用Python的新regex模块创建模糊匹配异常
问题内容:
我正在测试新的python
regex模块,该模块允许模糊字符串匹配,到目前为止,它的功能给人留下了深刻的印象。但是,我在使用模糊匹配进行某些例外处理时遇到了麻烦。以下是一个恰当的例子。我要ST LOUIS
和ST LOUIS
1的编辑距离内的所有变体匹配ref
。不过,我想打一个例外:编辑不能由一个插入含有字母的最左边字符的左侧N
,S
,E
,或W
。在下面的示例中,我希望输入1-3匹配ref,而输入4失败。但是,使用以下ref
使它与所有四个输入匹配。熟悉新正则表达式模块的人是否知道可能的解决方法?
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
,这就是为什么将其添加到否定的lookahead中的原因。
请注意,如果您允许错误> 1,则可能无法按预期运行。