首页 > 解决方案 > 使用 re.compile(flags=),运算符如何 | 和 + 不同(如果有的话)?

问题描述

使用 python 正则表达式,标志本质上是ints 以 2 的幂分布。它们的值如下:

for flag in [re.I, re.L, re.M, re.S, re.U, re.X, re.DEBUG, re.A]:
    print(f'{flag.name:>10}', flag + 0, sep='\t')
# IGNORECASE    2
#     LOCALE    4
#  MULTILINE    8
#     DOTALL    16
#    UNICODE    32
#    VERBOSE    64
#      DEBUG    128
#      ASCII    256

可以将多个标志传递给flags关键字参数;re文档建议使用按位 OR 运算符 ( |),但据我所知,这实际上与使用加法运算符 ( +) 相同。在下面的示例中,两个运算符都 yield 18

re.I | re. S
# <RegexFlag.DOTALL|IGNORECASE: 18>
re.I + re. S
# 18

除了不是官方推荐的方法之外,是否有任何实际原因为什么使用+操作符会产生不希望的结果?

注意:我打算|在我的代码中使用。这纯粹是一个学术问题。

标签: pythonregexbitwise-operatorsbitwise-or

解决方案


推荐阅读