Python re.IGNORECASE является динамическим - PullRequest
1 голос
/ 24 апреля 2010

Я бы хотел сделать что-то вроде этого:

re.findall(r"(?:(?:\A|\W)" + 'Hello' + r"(?:\Z|\W))", 'hello world',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)

1 Ответ

2 голосов
/ 24 апреля 2010

Чтобы получить поведение по умолчанию, вы можете использовать 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), используется поведение по умолчанию.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...