Python—为什么正则表达式比列表中的搜索效率高很多?

Python—为什么正则表达式比列表中的搜索效率高很多?,python,regex,Python,Regex,当我看了一看2009年Google代码阻塞资格赛的问题时,简单的想法是从模式中生成所有可能的字符串,并将其保存在列表中,然后测试和计算匹配的字符串。这个算法简单明了,但它消耗了难以置信的大内存,你的笔记本电脑肯定会死掉 解决此问题的另一种方法是使用正则表达式将“()”替换为“[]”。Python embeddedre.match()和string.replace()花了不到几秒钟的时间通过了大型测试。现在的问题是,为什么正则表达式更强大 在我的理解中,可能有某种机制,比如yield函数,使您能够

当我看了一看2009年Google代码阻塞资格赛的问题时,简单的想法是从模式中生成所有可能的字符串,并将其保存在列表中,然后测试和计算匹配的字符串。这个算法简单明了,但它消耗了难以置信的大内存,你的笔记本电脑肯定会死掉

解决此问题的另一种方法是使用正则表达式将
“()”
替换为
“[]”
。Python embedded
re.match()
string.replace()
花了不到几秒钟的时间通过了大型测试。现在的问题是,为什么正则表达式更强大


在我的理解中,可能有某种机制,比如
yield
函数,使您能够生成一个“生成器”-iterable和一个pass。但这是我的猜测。

你的直觉基本上是正确的

有关计算机科学的详细信息,您可以查阅“”和“”的概念

您可以将regexp编译器视为接受regexp并生成一个函数的东西,该函数对您的输入字符串进行操作并保持一个状态,当它根据从regexp派生的规则使用输入字符串时,该状态会更新

如果我从概念上说,比如说,
(ab | cd)
的regexp将产生如下行为,那么我希望我不会对事情进行太多的破坏:

def match_ab_or_cd(s):
    state = "start"
    for c in s:
        if state == "start":
            if c == "a":
                state = "state_a"
            elif c == "c":
                state = "state_c"
        elif state == "state_a":
            if c == "b":
                return True
            elif c == "a":
                state = "state_a"
            else:
                state = "start"
        elif state == "state_c":
            if c == "d":
                return True
            elif c == "c":
                state = "state_c"
            else:
                state = "start"
    return False


>>> match_ab_or_cd("ab")
True
>>> match_ab_or_cd("cd")
True
>>> match_ab_or_cd("ae")
False
>>> match_ab_or_cd("aaaaab")
True
因此,对于许多简单的正则表达式,可以生成只需要使用输入字符串中的每个字符一次的机器。但是请记住,有些正则表达式不能很好地发挥作用,例如


哦,还有这个。您可以将它生成的第一张图片视为一个中间步骤,第二张图片可以翻译成上述机器。

通过regexp进行搜索不需要生成所有可能与regexp匹配的字符串。。这是你问题的关键吗?@AndrewMagee它是如何实现的?像这样的文件没有解释。DFA的想法在这里会很有帮助。我以前见过DFA,但从未想过正则表达式可以用这种方式实现。我认为这只是某种形式化的工具,在实践中毫无用处。错。好的,谢谢你。