Python re.compile: 不支持操作数类型 &: 字符串和整数。

4
我有以下代码:

我有以下代码:

import re
r = re.compile('^[0-9 ]{1,4}Ty', 'i')

我遇到了意外的错误:
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/usr/lib/python3.4/re.py", line 219, in compile
    return _compile(pattern, flags)
  File "/usr/lib/python3.4/re.py", line 275, in _compile
    bypass_cache = flags & DEBUG
TypeError: unsupported operand type(s) for &: 'str' and 'int'

如何解决这个问题?

@vaultah谢谢,使用re.IGNORECASE替换 'i' 可以正常工作。 - Croll
2个回答

8
"'i' 不是有效的标志值,因为 re 函数使用的所有编译标志必须是整数(re 使用按位操作来操作标志)。

请改用 re.I(或 re.IGNORECASE)。

"
import re
r = re.compile('^[0-9 ]{1,4}Ty', re.I)

从技术上讲,您可以将标志指定为字符串,但在这种情况下,它们必须包含在模式中:

import re
r = re.compile('(?i)^[0-9 ]{1,4}Ty')

来自文档

(?aiLmsux)

从字符集“a”,“i”,“L”,“m”,“s”,“u”,“x”中选择一个或多个字母。该组匹配空字符串;字母设置相应的标志。

因此,(?i)与传递re.I(或re.IGNORECASE)给compile具有相同的效果。


0

re模块中,标志是预定义的常量:

re.compile('..', re.IGNORECASE).

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接