Python 我如何只允许模式的一部分使用模糊正则表达式匹配?
我有一个Python 我如何只允许模式的一部分使用模糊正则表达式匹配?,python,regex,python-3.x,fuzzy-search,Python,Regex,Python 3.x,Fuzzy Search,我有一个pattern\u string='ATAG/gagaagagatg/TATA'和一个query\u string='ATAG/agcaagatg/TATA'。这适用于以下正则表达式匹配: r = regex.compile('(%s){e<=2}' % pattern_string) r.match(query_string) 在哪里 ideal_函数(模式_字符串='ATAG/gagaagagatg/TATA',查询_字符串='ATAG/agcaagatg/TATA')返回
pattern\u string='ATAG/gagaagagatg/TATA'
和一个query\u string='ATAG/agcaagatg/TATA'
。这适用于以下正则表达式匹配:
r = regex.compile('(%s){e<=2}' % pattern_string)
r.match(query_string)
在哪里
ideal_函数(模式_字符串='ATAG/gagaagagatg/TATA',查询_字符串='ATAG/agcaagatg/TATA')
返回True
ideal\u函数(模式字符串='ATGG/GAGAGATGATG/TATA',查询字符串='ATAG/AGCAAGATGATG/TATA')
返回False
对此最有效的方法将不胜感激,我必须在超过20000个模式字符串和超过500万个查询字符串的组合上执行此操作,因此它需要尽可能高效。它不一定必须是正则表达式解决方案,尽管它必须支持允许两个替换计数模糊匹配的选项(如在
{s中,您可以使用所需的理想函数()的以下实现将模糊性限制在斜杠之间的模式部分:
…这将生成所有匹配模式\u字符串的查询字符串
查询字符串中是否总是只有两个斜杠?是否有一个?根本没有斜杠?
ideal_function(pattern_string, query_string)
def ideal_function(pattern_string, query_string, fuzzy='e<=2'):
prefix, body, suffix = pattern_string.split('/')
r = regex.compile('%s/(%s){%s}/%s' % (prefix, body, fuzzy, suffix))
return r.match(query_string) is not None
>>> ideal_function('ATAG/GAGAAGATGATG/TATA', 'ATAG/AGCAAGATGATG/TATA')
True
>>> ideal_function('ATGG/GAGAAGATGATG/TATA', 'ATAG/AGCAAGATGATG/TATA')
False
>>> ideal_function('ATAG/GAGAAGATGATG/TATA', 'ATAG/AGCAAGATGATG/TATA', 'e<=1')
False
>>> ideal_function('ATAG/GAGAAGATGATG/TATA', 'ATAG/AGCAAGATGATG/TATA', 'e<=2')
True
>>> ideal_function('ATAG/GAGAAGATGATG/TATA', 'ATAG/AGCAAGATGATG/TATA', 's<=2')
False
>>> ideal_function('ATAG/GAGAAGATGATG/TATA', 'ATAG/AGCAAGATGATG/TATA', 's<=3')
True
def ideal_generator(pattern_string, all_query_strings, fuzzy='e<=2'):
prefix, body, suffix = pattern_string.split('/')
r = regex.compile('%s/(%s){%s}/%s' % (prefix, body, fuzzy, suffix))
for query_string in all_query_strings:
if r.match(query_string) is not None:
yield query_string