DevGang
Авторизоваться

Регулярные выражения в Python 

Регулярные выражения позволяют нам находить содержимое внутри строк, соответствующих определенному формату.

Формулируя регулярное выражение со специальным синтаксисом, вы можете

  1. искать текст в строке
  2. заменить подстроки в строке
  3. извлекать информацию из строки

Модуль re стандартной библиотеки Python предоставляет нам набор инструментов для работы с регулярными выражениями.

В частности, среди прочего, он предлагает нам следующие функции:

  1. re.match() проверяет совпадение в начале строки
  2. re.search() проверяет совпадение в любом месте строки

Оба принимают 3 параметра: шаблон, строку для поиска и флаги.

Прежде чем говорить о том, как их использовать, давайте познакомимся с основами шаблона регулярного выражения.

Шаблон представляет собой строку, заключенную в r''. Внутри него мы можем использовать некоторые специальные комбинации символов, которые мы можем использовать для захвата желаемых значений.

Например:

  • . соответствует одному символу (кроме символа новой строки)
  • \w соответствует любому буквенно-цифровому символу ([a-zA-Z0-9_])
  • \W соответствует любому не буквенно-цифровому символу
  • \d соответствует любой цифре
  • \D соответствует всему, что не является цифрой
  • \s соответствует пробелу
  • \S соответствует всему, что не является пробелом

Квадратные скобки могут содержать совпадение нескольких символов: [\d\sa] соответствует цифрам и пробелам, а также символу a. [a-z] соответствует символам от a до z.

\ может использоваться для экранирования, например, для соответствия точке ., которую вы должны использовать в своем шаблоне подобным образом \..

| означает или

Также у нас есть якоря:

  1. ^ соответствует началу строки
  2. $ соответствует концу строки

Затем у нас есть модификаторы количества:

  1. ? означает «ноль или один» вхождений
  2. * означает «ноль или более» вхождений
  3. + означает «одно или несколько» вхождений
  4. {n} означает «точно n» вхождений
  5. {n,} означает «не менее n» вхождений
  6. {n, m} означает «минимум n и максимум m»

Скобки (<expression>), создают группу. Группы интересны, потому что мы можем фиксировать содержание группы.

Эти 2 примера соответствуют всей строке:

re.match('^.*Roger', 'My dog name is Roger')
re.match('.*', 'My dog name is Roger')

Вывод одного из этих операторов приведет к появлению такой строки:

<re.Match object; span=(0, 20), match='My dog name is Roger'>

Если вы присвоите результат переменной result и вызовете group(), вы увидите совпадение:

result = re.match('^.*Roger', 'My dog name is Roger')
print(result.group())
# My dog name is Roger

Давайте попробуем узнать кличку собаки. Если вы не знаете, как будет называться собака, вы можете найти «name is» и затем добавить группу, например:

result = re.search('name is (.*)', 'My dog name is Roger')

result.group() напечатает «name is Roger» и result.group(1) напечатает содержимое группы «Roger»:

print(result.group())  # name is Roger
print(result.group(1)) # Roger

Я уже упоминал, что re.search() и re.match() принимают флаги в качестве 3-го параметра. У нас есть несколько возможных флагов, наиболее часто используемый - re.I должен выполнить сопоставление без учета регистра.

Это всего лишь введение в регулярные выражения, начиная с этого, вы можете попасть в множество кроличьих нор.

Я рекомендую попробовать ваши регулярные выражения на https://regex101.com для правильности. Убедитесь, что вы выбрали вариант Python на боковой панели.

Источник:

#Python
Комментарии
Чтобы оставить комментарий, необходимо авторизоваться

Присоединяйся в тусовку

Поделитесь своим опытом, расскажите о новом инструменте, библиотеке или фреймворке. Для этого не обязательно становится постоянным автором.

Попробовать

Оплатив хостинг 25$ в подарок вы получите 100$ на счет

Получить