正则表达式错误 - 没有什么可重复的

时间:2010-09-09 09:00:30

标签: python regex

使用此表达式时收到错误消息:

re.sub(r"([^\s\w])(\s*\1)+","\\1","...")

我在RegExr检查了正则表达式,并按预期返回.。但是,当我在Python中尝试它时,我收到此错误消息:

raise error, v # invalid expression
sre_constants.error: nothing to repeat

有人可以解释一下吗?

5 个答案:

答案 0 :(得分:40)

它似乎是一个python bug(在vim中完美运行)。 问题的根源是(\ s * ...)+位。基本上,你不能做有意义的(\s*)+,因为你试图重复一些可能为空的东西。

>>> re.compile(r"(\s*)+")
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/System/Library/Frameworks/Python.framework/Versions/2.5/lib/python2.5/re.py", line 180, in compile
    return _compile(pattern, flags)
  File "/System/Library/Frameworks/Python.framework/Versions/2.5/lib/python2.5/re.py", line 233, in _compile
    raise error, v # invalid expression
sre_constants.error: nothing to repeat

(\s*\1)不应该为空,但我们知道它只是因为我们知道\ 1中的内容。显然python不......那很奇怪。

答案 1 :(得分:13)

这是“*”和特殊字符之间的Python错误。

而不是

re.compile(r"\w*")

尝试:

re.compile(r"[a-zA-Z0-9]*")

它有效,但不会生成相同的正则表达式。

此错误似乎已在2.7.5和2.7.6之间修复。

答案 2 :(得分:4)

它实际上不仅是带有*的Python错误,当你将一个字符串作为正则表达式的一部分传递给它时也会发生,例如;

import re
input_line = "string from any input source"
processed_line= "text to be edited with {}".format(input_line)
target = "text to be searched"
re.search(processed_line, target)

如果处理行包含一些&#34;(+)&#34;这将导致错误例如,就像你可以在化学公式或类似的字符链中找到的那样。 解决方案是逃避,但是当你在飞行中这样做时,你可能无法正确地做到这一点......

答案 3 :(得分:3)

除了发现并修复的错误之外,我只会注意到错误消息sre_constants.error: nothing to repeat有点令人困惑。我试图使用r'?.*'作为模式,并认为它抱怨*的一些奇怪的原因,但问题实际上是?是一种说“重复零”的方式或者一次“。所以我需要说r'\?.*'来匹配文字?

答案 4 :(得分:0)

在语言理论中,正则表达式通常使用*和+。 在执行行代码

时遇到相同的错误
With ActiveSheet
    lc = .Cells(1, .Columns.Count).End(xlToLeft).column
    Dim headerCells As Variant
    headerCells = .Range(.Cells(1, 1), .Cells(1, lc)).Value '2D variant array
End With

Dim headers As String
headers = Join(Application.Transpose(Application.Transpose(headerCells)), ",")

Debug.Print headers

要解决此问题,它需要在*和+之前加上\

re.split("*",text)