Как найти слова через регулярное выражение используя независимый регистр
Всем привет!
Не могу найти, как мне использовать поиск слов через регулярное выражение вкл нижний регистр, чтобы мне не писать копировать в регулярке kontakty и Kontakty.
Заранее всем благодарен!
import re
re.findall(r'(contact|kontakt|контакты|kontakty|feedback)', 'http://www.web.ru/Kontakty/')
Ответы (2 шт):
добавил (?i)
import re
result = re.findall('(?i)(contact|kontakt|контакты|feedback)', 'http://www.uralstil.ru/Kontakty/')
Для регистронезависимого поиска с помощью регулярных выражений re используется флаг re.I / re.IGNORECASE (аналогичный аргумент есть и в библиотеке PyPi regex, regex.I/regex.IGNORECASE):
re.I— делает поиск нечувствительным к регистру
Примеры использования в разных функциях re:
re.compile(r'\bстрока\b', re.I) # компилирует регистронезависимое регулярное выражение для поиска слов "строка"
re.findall(r'\bстрока\b', text, re.I) # ищет все вхождения целого слова "строка" в тексте независимо от регистра
re.match(r'\bстрока\b', text, re.I) # ищет вхождение целого слова "строка" в начале текста независимо от регистра
re.search(r'\bстрока\b', text, re.I) # ищет вхождение целого слова "строка" где угодно в тексте независимо от регистра
re.sub(r'\bстрока\b', r'<b>\g<0></b>', text, flags=re.I) # заключает все вхождения целого слова "строка" независимо от регистра в тег <b> (именной аргумент flags тут очень важен!)
Сделать целое выражение регистронезависимым можно добавив (?i) в начале регулярного выражения, т.е. (?i)<РЕГУЛЯРНОЕ_ВЫРАЖЕНИЕ>:
(?imx)— временно включает параметрыi,mилиxв регулярное выражение. Если используются круглые скобки — затрагивается только эта область.
(?-imx)— временно отключает опцииi,mилиxв регулярном выражении. Если используются круглые скобки — затрагивается только эта область.
Пример:
(?i)(мама|папа)
См. пример работы регулярного выражения.
Если нужно сделать лишь часть выражения регистронезависимым, используйте группу с модификатором:
(?imx: re)— Временно включает параметрыi,mилиxв круглых скобках.
(?-imx: re)— временно отключает опцииi,mилиxв круглых скобках.
Пример:
Пропала\s+(?i:собака|кошка)
См. пример работы регулярного выражения (к сожалению, при тестировании на regex101 этот конструкт не работает, поэтому я выбрал опцию .NET, в коде всё работает).