Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/337.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 我如何只允许模式的一部分使用模糊正则表达式匹配?_Python_Regex_Python 3.x_Fuzzy Search - Fatal编程技术网

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