当我们想要组合re.IGNORECASE和re.DOTALL时,为什么要使用按位or运算符?

2024-10-04 07:34:09 发布

您现在位置:Python中文网/ 问答频道 /正文

从我的课本(自动化无聊的东西,艾尔·斯维加特): “如果希望正则表达式不区分大小写包含换行符以匹配点字符,则可以按如下方式形成re.compile()调用:

someRegexValue = re.compile('foo', re.IGNORECASE | re.DOTALL)

不幸的是,re.compile()函数只接受一个值作为其第二个参数。您可以通过使用管道字符(|)组合re.IGNORECASEre.DOTALL变量来绕过此限制,在本上下文中,此字符称为按位或运算符

此页面作为附加资源提供:https://wiki.python.org/moin/BitwiseOperators/

我不明白为什么我们不使用按位and运算符。参考该页,如果我们将x和y视为一些匹配条件,并且两者必须同时应用,我会直观地使用and运算符

我们不能这样做有什么原因吗


Tags: and函数re参数管道foo方式运算符
1条回答
网友
1楼 · 发布于 2024-10-04 07:34:09

各种re.FLAGS是位掩码的一部分,每个标志都是2的某个值以占据某个位位置。例如:

re.IGNORECASE =  2 = 00010
re.DOTALL     = 16 = 10000

因此,表达式re.IGNORECASE | re.DOTALL将生成以下位掩码:

10010

许多re库函数的flags参数都期望这样的位掩码来决定应用哪些标志。如果我们按位&上述两个运算符,我们只会得到零。事实上,对于两个不同标志之间的任何按位&,我们将得到零,因为没有任何位会重叠

相关问题 更多 >