我想做这样的事情:
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.I
、re.M
等),每个标志由单个位表示。当未设置任何位(值 0)时,将使用默认行为。
关于Python re.IGNORECASE 是动态的,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2701844/