使用多次re.FLAG时运算符之间有什么区别

时间:2019-03-07 08:22:31

标签: regex python-3.x

有3种正则表达式模式,如下所示。

r1=re.compile(r"""
    # com
    abc
    # tehis
    \s+\d+
    """, re.S|re.X)

r2=re.compile(r"""
    # com
    abc
    # tehis
    \s+\d+
    """, re.S+re.X)  

r3=re.compile(r"""
    # com
    abc
    # tehis
    \s+\d+
    """, re.S&re.X)

和要匹配的字符串一样。

>>> s
'abc\n    899'

搜索和匹配结果显示如下。

>>> s
'abc\n    899'
>>> r1.findall(s)
['abc\n    899']
>>> r2.findall(s)
['abc\n    899']
>>> r3.findall(s)
[]

我们看到r3匹配失败,而r1和r2成功。那么使用多个re.FLAGS时不同运算符之间有什么区别?

1 个答案:

答案 0 :(得分:1)

fflush(stdout);标志(例如re)似乎是整数值。但是,它们被解释为二进制位掩码。  因此,这就是您的面具实际上等于:

re.I

以下是re.S | re.X = 80 re.S + re.X = 80 re.S & re.X = 0 的二进制值:

80

这是1010000 (64)和re.S(16)的二进制值:

re.X

从上方应该清楚地看到re.S = 1000000 re.X = 0010000 1010000 <--- 80 in decimal re.S | re.X恰好覆盖了两个标志的位,而re.S + re.X却没有。在这种情况下,整数加法re.S & re.X和按位或+会产生相同的结果。