regex 关于嵌入空格的VERBOSE无法编译

ttp71kqs  于 2023-02-25  发布在  其他
关注(0)|答案(1)|浏览(87)
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)
re.compile(r"(?: *)")

docs for VERBOSE表示“模式中的空格将被忽略,除了......在 *?、(?:或者(?P<...>.”,但它似乎没有尊重“(?:“部分。这是一个库错误,还是我只是没有弄清楚文档的意思?
我可以在以下任一位置复制此内容:

  • Python 3.9.13 / MacOS 12.6.1操作系统( Monterey )
  • Python 3.9.2 / Debian 11.5(中文版)
qacovj5a

qacovj5a1#

文档有两个重要的细节:
“ignore,except”不一定意味着正确的模式,它意味着考虑了空格。
而且,措辞是“在令牌内”。正如文档还说的(紧接着你的引用之后):“例如,(?:和 *?”。注意空格出现在标记的“内部”,而不是之后。
如果您运行re.compile(r"(?:*)", flags=re.VERBOSE)(即删除空格),您将得到相同的错误(尽管现在在位置3)。

相关问题