我有一个详细的(re.X
)标记了抛出异常的正则表达式,即使它似乎与其压缩版本等效。 (我从后者构建了前者。)
精简版:
import re
test = 'catdog'
test2 = 'dogcat'
pat = re.compile(r'(?=\b\w{6}\b)\b\w*cat\w*\b')
print(pat.search(test))
print(pat.search(test2))
# catdog Match object
# dogcat Match object
详细版本:
pat = re.compile(r"""( # Start of group (lookahead); need raw string
?= # Positive lookahead; notation = `q(?=u)`
\b\w{6}\b # Word boundary and 6 alphanumeric characters
) # End of group (lookahead)
\b\w*cat\w*\b # Literal 'cat' in between 0 or more alphanumeric""", re.X)
print(pat.search(test).string)
print(pat.search(test2).string)
# Throws exception
# error: nothing to repeat at position 83 (line 2, column 22)
这是什么原因造成的?我找不到为什么扩展版本违反了任何条件re.X
/re.VERBOSE
。来自文档:
该标志允许您编写看起来更好的正则表达式
通过允许您在视觉上分离逻辑,更具可读性
模式的各个部分并添加注释。内的空白
模式被忽略,除非在字符类中或在前面
通过未转义的反斜杠。当一行包含不在 a 中的 # 时
字符类并且前面没有未转义的反斜杠,所有
从最左边的 # 到行尾的字符是
被忽略。
据我所知,没有任何字符类或空格前面有未转义的反斜杠。
This is Python 问题 15606 https://bugs.python.org/issue15606. re
在详细模式下标记内有空格的行为与文档不匹配。中间不能添加空格(?=
.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)