繁体   English   中英

正则表达式错误 - 无需重复

[英]regex error - nothing to repeat

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

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

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

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

有人可以解释一下吗?

这似乎是一个 python 错误(在 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 没有......这很奇怪。

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

而不是

re.compile(r"\w*")

尝试:

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

它可以工作,但是不会生成相同的正则表达式。

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

实际上,这不仅是带有 * 的 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)

例如,如果处理的行包含一些“(+)”,这将导致错误,就像您可以在化学式或这样的字符链中找到的那样。 解决办法是逃跑,但是当你在飞行中逃跑时,可能会发生你未能正确完成的情况......

正则表达式在语言理论中通常使用 * 和 +。 我在执行行代码时遇到了同样的错误

re.split("*",text)

要解决它,它需要在 * 和 + 之前包含 \\

re.split("\*",text)

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

我在使用正则表达式\\b?时遇到了这个问题\\b? . 使用\\s? 修复了问题(虽然不是一回事)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM