Python re.IGNORECASE 动态性
我想做这样的事情:
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.I
、re.M
等),每个标志用一个单独的位来表示。当没有设置任何标志(值为 0)时,就会使用默认的行为。