用Python创建新的正则表达式模块模糊匹配例外(Creating fuzzy matching e

2019-07-19 05:39发布

我测试了新的蟒蛇正则表达式模块,允许模糊字符串匹配,至今留下深刻印象的能力。 不过,我一直有麻烦一些例外与模糊匹配。 下面是一个很好的例子。 我想ST LOUIS ,和所有变化ST LOUIS 1的编辑距离之内以配合ref 。 不过,我想打一个例外:编辑不能由一个插入包含字母最左边的字符左边的NSE ,或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>

Answer 1:

尝试负先行,而不是:

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

(ST LOUIS){e<=1}匹配会议置于其上的模糊条件的字符串。 要防止其与起始[NSEW] 负前瞻会替你(?![NSEW]) 但是,你需要的字符串开始用S已经,您只需要排除开头的字符串S添加到您的字符串的开头。 这样的字符串将与启动SS ,这就是为什么它加入到负前瞻。

需要注意的是,如果你允许误差> 1,这可能不会如期望的工作。



文章来源: Creating fuzzy matching exceptions with Python's new regex module