有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时不同运算符之间有什么区别?
答案 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
和按位或+
会产生相同的结果。