На этом шаге мы рассмотрим использование флага re.IGNORECASE.
Вам необходимо найти и, возможно, заменить текст, не обращая внимания на регистр букв.
Для выполнения действий над текстом без учета регистра вам понадобится модуль re и флаг re.IGNORECASE, который можно применять в различных операциях. Например:
>>> text = 'UPPER PYTHON, lower python, Mixed Python' >>> re.findall('python', text, flags=re.IGNORECASE) ['PYTHON', 'python', 'Python'] >>> re.sub('python', 'snake', text, flags=re.IGNORECASE) 'UPPER snake, lower snake, Mixed snake' >>>
Последний пример демонстрирует ограничение способа: текст замены не будет совпадать по регистру с заменяемым текстом. Если вам нужно исправить такое поведение, используйте функцию поддержки:
>>> def matchcase(word): def replace(m): text = m.group() if text.isupper(): return word.upper() elif text.islower(): return word.lower() elif text[0].isupper(): return word.capitalize() else: return word return replace
А вот пример использования этой функции:
>>> re.sub('python', matchcase('snake'), text, flags=re.IGNORECASE) 'UPPER SNAKE, lower snake, Mixed Snake' >>>
В случаях простого применения re.INGNORECASE достаточно для поиска совпадений без учета регистра. Однако обратите внимание, что этого может оказаться недостаточно для некоторых случаев работы с Unicode, использующих выравнивание регистров (case folding).
На следующем шаге мы рассмотрим определение регулярных выражений для поиска кратчайшего совпадения.