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