Python re.IGNORECASE 动态性

1 投票
1 回答
4248 浏览
提问于 2025-04-15 21:57

我想做这样的事情:

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)

要把它设置为区分大小写。有没有更符合 Python 风格的方法来做到这一点?到目前为止,我想到的最好办法是:

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

1 个回答

2

如果你想要默认的行为,可以在参数中使用 0。不要使用 1,因为这会设置一个不常见的 re.TEMPLATE 标志,这样会禁用回溯功能。

所以你可以这样使用:

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

这个参数其实是多个标志的组合(比如 re.Ire.M 等),每个标志用一个单独的位来表示。当没有设置任何标志(值为 0)时,就会使用默认的行为。

撰写回答