Python 正则表达式冻结

Python 正则表达式冻结,python,regex,Python,Regex,我有以下正则表达式: pattern = re.compile("([a-z]+-*[a-z]+)+$") 但当我跑步时: pattern.match("departamento-de-archipielago-de-san-andres-providencia-y-santa-catalina") 行没有结束,即程序冻结 我试过: pattern.match("departamento-de-archipielago-de-san-andres-providencia-y-") patt

我有以下正则表达式:

pattern = re.compile("([a-z]+-*[a-z]+)+$")
但当我跑步时:

pattern.match("departamento-de-archipielago-de-san-andres-providencia-y-santa-catalina")
行没有结束,即程序冻结

我试过:

pattern.match("departamento-de-archipielago-de-san-andres-providencia-y-")
pattern.match("departamento-de-archipielago-de-san-andres-providencia-y")
但它不起作用

最后,我尝试了:

pattern.match("departamento-de-archipielago-de-san-andres-providencia-y-")
pattern.match("departamento-de-archipielago-de-san-andres-providencia-y")
这确实有效! 我不明白这里怎么了。是虫子吗

我正在使用python 3.5.2

re.compile("([a-z]+-[a-z]+)+$")
将更好地工作,因为它看起来像你正在尝试做的事情。您提供的正则表达式之所以被调用,是因为
-*
导致它带着大量荒谬的可能性跑掉

如果您确实需要多个连字符,
-+
也可以

将更好地工作,因为它看起来像你正在尝试做的事情。您提供的正则表达式之所以被调用,是因为
-*
导致它带着大量荒谬的可能性跑掉


如果您真的需要多个连字符,
-+
也可以。

不,这不是一个bug,这是由您的模式设计导致的灾难性回溯。您有一个病态的正则表达式。查一查。您可能需要
[a-z]+(++[a-z]+)*$
。单击regex调试器查看发生了什么:不,这不是错误,这是由您的模式设计导致的灾难性回溯。您有一个病态的regex。查一查。您可能需要
[a-z]+(++[a-z]+)*$
。单击regex调试器以查看发生了什么:请注意,它始终是一个糟糕的设计,因为第二个
[a-z]+
在每个组重复时生成大量回溯步骤。看看Ryan模式设计,它的效率要高得多。@Casimimirithippolyte同意这一点。注意,它总是一个糟糕的设计,因为第二个
[a-z]+
在每个组重复时都会产生很多回溯步骤。“看看Ryan的图案设计,它的效率要高得多。”Casimirithippolyte表示同意