Python re.IGNORECASE 是动态的

标签 python regex

我想做这样的事情:

re.findall(r"(?:(?:\A|\W)" + 'Hello' + r"(?:\Z|\W))", 'hello world',re.I)

并且 re.I 是动态的,因此我可以即时进行区分大小写或不区分大小写的比较。这有效但没有记录:

re.findall(r"(?:(?:\A|\W)" + 'Hello' + r"(?:\Z|\W))", 'hello world',1)

将其设置为敏感。有Pythonic的方法来做到这一点吗?到目前为止我最好的想法是:

if case_sensitive:
   regex_senstive = 1
else:
   regex_sensitive = re.I
re.findall(r"(?:(?:\A|\W)" + 'Hello' + r"(?:\Z|\W))", 'hello world',regex_sensitive)

最佳答案

要获得默认行为,您可以使用 0 作为 flags 参数。您不应该使用 1,因为它会设置未记录的 re.TEMPLATE 标志,从而禁用回溯。

所以你可以使用:

flags = 0 if case_sensitive else re.I
re.findall(r'pattern', s, flags)

flags 参数实际上是标志的组合(re.Ire.M 等),每个标志由单个位表示。当未设置任何位(值 0)时,将使用默认行为。

关于Python re.IGNORECASE 是动态的,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2701844/

相关文章:

python csv 分隔太多

python - 使用 GUI 运行 Python 脚本时如何摆脱 "Command Line"窗口?

用于查找带有字符和数字的字符串的正则表达式

python - 需要正则表达式帮助来匹配数字

regex - 期望中的正则表达式

python - IPython 嵌入式 QT 小部件,无需内核

Python,特征选择

python - Python 的垃圾收集器如何检测循环引用?

python - 正则表达式 django url

python - 匹配 SINXX11-111111 的正则表达式