我使用此表达式时收到错误消息:
re.sub(r"([^\s\w])(\s*\1)+","\\1","...")
Run Code Online (Sandbox Code Playgroud)
我在RegExr检查了正则表达式,它.
按预期返回.但是当我在Python中尝试它时,我收到此错误消息:
raise error, v # invalid expression
sre_constants.error: nothing to repeat
Run Code Online (Sandbox Code Playgroud)
有人可以解释一下吗?
mb1*_*b14 40
它似乎是一个python bug(在vim中完美运行).问题的根源是(\ s*...)+位.基本上,你不能做(\s*)+
有意义的事情,因为你试图重复一些可以为null的东西.
>>> 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
Run Code Online (Sandbox Code Playgroud)
但是(\s*\1)
不应该为null,但我们知道它只是因为我们知道\ 1中的内容.显然python没有...这很奇怪.
小智 14
这是"*"和特殊字符之间的Python错误.
代替
re.compile(r"\w*")
Run Code Online (Sandbox Code Playgroud)
尝试:
re.compile(r"[a-zA-Z0-9]*")
Run Code Online (Sandbox Code Playgroud)
它工作,但不会使相同的正则表达式.
这个错误似乎已经在2.7.5和2.7.6之间修复.
小智 7
正则表达式在语言理论中通常使用 * 和 +。我在执行行代码时遇到了同样的错误
re.split("*",text)
Run Code Online (Sandbox Code Playgroud)
要解决它,它需要在 * 和 + 之前包含 \
re.split("\*",text)
Run Code Online (Sandbox Code Playgroud)
除了发现和修复的错误之外,我会注意到错误消息sre_constants.error: nothing to repeat
有点令人困惑。我试图r'?.*'
用作一种模式,并认为它出于某种奇怪的原因抱怨*
,但问题实际上?
是一种说“重复零次或一次”的方式。所以我需要说r'\?.*'
匹配文字?
实际上,这不仅是带有*的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)
Run Code Online (Sandbox Code Playgroud)
如果处理过的行包含一些“(+)”(例如,您可以在化学式中找到)或此类字符链,则将导致错误。解决方案是逃脱,但是当您即时进行操作时,可能会发生无法正确执行操作的情况...
归档时间: |
|
查看次数: |
87497 次 |
最近记录: |