使用re.VERBOSE模式时嵌入空格编译失败问题咨询
关于re.VERBOSE模式下正则编译报错的疑问
以下代码在使用re.VERBOSE标志编译时会抛出错误:
import re re.compile(r"(?: *)", flags=re.VERBOSE)
报错信息:
re.error: nothing to repeat at position 4
但以下几种写法均可正常编译:
# 转义空格 re.compile(r"(?:\ *)", flags=re.VERBOSE) # 使用字符类包裹空格 re.compile(r"(?:[ ]*)", flags=re.VERBOSE) # 不使用VERBOSE标志 re.compile(r"(?: *)")
根据Python 3.9官方文档对VERBOSE模式的说明:
模式中的空白符会被忽略,但在*?、(?:或(?P<...>这类标记内的情况除外
但实际测试中,(?:)内部的空格依然被忽略了,导致正则表达式变为(?:*),进而触发“nothing to repeat”的错误。请问这是Python re库的bug,还是我对文档说明的理解存在偏差?
可复现该问题的环境:
- Python 3.9.13 / MacOS 12.6.1 (Monterey)
- Python 3.9.2 / Debian 11.5 (bullseye)
内容的提问来源于stack exchange,提问作者Roy Smith
相关产品推荐
相关产品推荐

