正则expression式错误 – 没有重复
当我使用这个expression式时,我得到一个错误消息:
re.sub(r"([^\s\w])(\s*\1)+","\\1","...")
我在RegExr检查正则expression式,它返回.
如预期。 但是,当我在Python中尝试它,我得到这个错误消息:
raise error, v # invalid expression sre_constants.error: nothing to repeat
有人可以解释吗?
这似乎是一个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不…那很奇怪。
这是“*”和特殊字符之间的Python错误。
代替
re.compile(r"\w*")
尝试:
re.compile(r"[a-zA-Z0-9]*")
它的工作原理,但是不会使正则expression式相同。
这个bug似乎已经被固定在2.7.5和2.7.6之间。
这不仅仅是一个带有*的Python错误,当你传递一个string作为正则expression式的一部分被编译时,它也会发生。
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)
这会导致一个错误,如果处理的行包含一些“(+)”例如,你可以在化学公式或字符链中find。 解决办法是逃跑,但是当你在飞行中这样做的时候,可能会发生你不能正确地做到这一点…
除了被发现和修复的bug之外,我还会注意到错误消息sre_constants.error: nothing to repeat
的,有点令人困惑。 我试图用r'?.*'
作为一种模式,并认为它是抱怨有关这个*
一个奇怪的原因,但是问题其实是那个?
是一种说“重复零次或一次”的方式。 所以我需要说r'\?.*'
来匹配文字?