【发布时间】:2019-08-07 04:07:45
【问题描述】:
我有一个pattern_string = 'ATAG/GAGAAGATGATG/TATA' 和一个query_string = 'ATAG/AGCAAGATGATG/TATA'。这适用于以下正则表达式匹配:
r = regex.compile('(%s){e<=2}' % pattern_string)
r.match(query_string)
这里,唯一的变化是两个/ 字符之间。但是,我想限制匹配的模糊性,只允许在这些字符之间,而/ 边界之外的字符仍然是完全匹配的。
例如,pattern_string = 'ATGG/GAGAAGATGATG/TATA' 和 query_string = 'ATAG/AGCAAGATGATG/TATA'不 匹配,因为字符串的第一部分(ATGG 与 ATAG)不匹配。同样,pattern_string = 'ATAG/GAGAAGATGATG/TATG' 和 query_string = 'ATAG/AGCAAGATGATG/TATA' 也不匹配,因为字符串的最后一部分(TATG vs TATA)不匹配。
总之,/(或任何分隔符)内的字符串部分应允许根据正则表达式(在本例中为{e<=2})指定的内容进行模糊匹配,但外部的字符串必须完全匹配。
如何做到这一点?
我正在想象一个类似下面的函数
ideal_function(pattern_string, query_string)
在哪里
ideal_function(pattern_string = 'ATAG/GAGAAGATGATG/TATA', query_string = 'ATAG/AGCAAGATGATG/TATA') 返回True
ideal_function(pattern_string = 'ATGG/GAGAAGATGATG/TATA', query_string = 'ATAG/AGCAAGATGATG/TATA') 返回False
最有效的方法将不胜感激,我必须对超过 20,000 个模式字符串和超过 500 万个查询字符串的组合执行此操作,因此它需要尽可能高效。它不一定必须是正则表达式解决方案,但它必须支持允许对指定的替换计数(如{s<=2})和错误计数(如{e<=2})进行模糊匹配的选项。
【问题讨论】:
-
查询字符串中是否总是只有两个斜杠?可以有一个吗?根本没有斜线?
标签: python regex python-3.x fuzzy-search