Рубрики
Без рубрики

Python Regex Match

Почему регулярные выражения пережили семь десятилетий технологического разрушения? Поскольку кодеры, которые понимают регулярные выражения, имеют огромное преимущество при работе с текстовыми данными. Они могут написать в одной строке кода, что делает других десятков! В этой статье все о методе Re.match () () библиотеки Python Re. Есть два аналогичных метода для … Python Regex Match Подробнее »

Автор оригинала: Chris.

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

Эта статья все о Re.match () Метод Python Re Библиотека Отказ Есть два аналогичных метода, которые помогут вам использовать регулярные выражения:

  • Простота в использовании, но менее мощных Re.findall () Метод возвращает список строковых совпадений. Проверьте Наше руководство в блоге Отказ
  • Re.Search () Метод возвращает объект совпадения первого матча. Проверьте Наше руководство в блоге Отказ

Связанная статья: Python Regex SuperPower – Ultimate Guide

Вы хотите освоить сверхдержаву Regeex? Проверьте мою новую книгу Самый умный способ изучать регулярные выражения в Python С инновационным 3-ступенчатым подходом для активного обучения: (1) Изучение книги главы, (2) Решите головоломки кода и (3) Смотреть воспроизведение главы видео.

Так как же Re.match () Метод работы? Давайте изучим спецификацию.

Как работает Re.match () в Python?

Re.match (шаблон, строка) Метод возвращает объект совпадения, если шаблон матчи В начале из строка Отказ Объект Match содержит полезную информацию, такую как соответствующие группы и соответствующие позиции. Дополнительный аргумент Флаги Позволяет настроить двигатель REGEX, например, игнорировать капитализацию.

Спецификация :

re.match(pattern, string, flags=0)

Re.match () Метод имеет до трех аргументов.

  • шаблон : Регулярное выражение выражения, которое вы хотите сопоставить.
  • строка : Строка, которую вы хотите искать шаблон.
  • Флаги (Необязательный аргумент): более продвинутый модификатор, который позволяет настроить поведение функции. Хотите знать Как использовать эти флаги? Проверьте эту подробную статью на блог Finxter.

Мы рассмотрим их более подробно позже.

Возвращаемое значение:

Re.match () Метод возвращает объект совпадения. Вы можете спросить (и правильно):

Что такое объект матча?

Если регулярное выражение соответствует части вашей строки, есть много полезной информации, которая поставляется с ней: какая точная позиция матча? Какие группы Regex были сопоставлены – и где?

Матч объект Это простая обертка для этой информации. Некоторые методы Regex из Re Модуль в Python – такой как Re.match () -Автоматически создать объект совпадения на первом шаблоне.

На данный момент вам не нужно подробно исследовать объект Match. Просто знайте, что мы можем получить доступ к началу и конечным положениям матча в строке, вызвав методы M.START () и M.end () на объекте матча м :

>>> m = re.match('h...o', 'hello world')
>>> m.start()
0
>>> m.end()
5
>>> 'hello world'[m.start():m.end()]
'hello'

В первой строке вы создаете объект матча м Используя Re.match () метод. Шаблон H ... O ' соответствует строке «Hello World» В начале позиции 0. Вы используете пункт начала и конечного положения для доступа к подстроке, соответствующему шаблону (используя популярную Python Technique of Slicing ). Но обратите внимание, что как Матч () Метод всегда пытается соответствовать только в начале строки, M.START () Метод всегда будет возвращать ноль.

Теперь вы знаете цель Матч () Объект в Python. Давайте проверим несколько примеров Re.match () !

Предполагаемый пример для Re.match ()

Во-первых, вы импортируете модуль RE и создаете текстовую строку для поиска шаблонов Regex:

>>> import re
>>> text = '''
    Ha! let me see her: out, alas! he's cold:
    Her blood is settled, and her joints are stiff;
    Life and these lips have long been separated:
    Death lies on her like an untimely frost
    Upon the sweetest flower of all the field.
'''

Допустим, вы хотите найти текст для строки «Ее»:

>>> re.match('lips', text)
>>>

Первый аргумент – это шаблон, который можно найти: строка «Губы» Отказ Второй аргумент – это текст, который будет проанализирован. Вы сохраните многострочную строку в переменной тексте – поэтому вы принимаете это как второй аргумент. Третий аргумент Флаги из Матч () Метод необязательно.

Там нет вывода! Это означает, что Re.match () Метод не вернул объект матча. Почему? Потому что в начале строки нет матча для рисунка Regex «Губы» Отказ

Так как мы можем это исправить? Просто, сопоставляя все символы, которые предшествуют строке «Губы» в тексте:

>>> re.match('(.|\n)*lips', text)
>>> m = re.match('(.|\n)*lips', text)
>>> text[m.start():m.end()]
"\n    Ha! let me see her: out, alas! he's cold:\n    Her blood is settled, and her joints are stiff;\n    Life and these lips"

Интересно, что вы также можете получить то же самое, указав аргумент третьего флага следующим образом:

>>> m = re.match('.*lips', text, flags=re.DOTALL)
>>> text[m.start():m.end()]
"\n    Ha! let me see her: out, alas! he's cold:\n    Her blood is settled, and her joints are stiff;\n    Life and these lips"

Re.dotall Флаг гарантирует, что оператор DOT Отказ соответствует всем персонажам в том числе новый символ линии.

В чем разница между Re.match () и Re.findall ()?

Существует две различия между Re.match (шаблон, строка) и Re.findall (шаблон, строка) Методы:

  • Re.match (шаблон, строка) Возвращает объект совпадения во время Re.findall (шаблон, строка) Возвращает список сопоставленных строк.
  • Re.match (шаблон, строка) Возвращает только первый матч в строке и только в начале – пока Re.findall (шаблон, строка) Возвращает все спички в строке.

Оба можно увидеть в следующем примере:

>>> text = 'Python is superior to Python'
>>> re.match('Py...n', text)

>>> re.findall('Py...n', text)
['Python', 'Python']

Строка «Python превосходит Python» содержит два вхождения «Питон» Отказ Матч () Способ возвращает только объект совпадения первого вхождения. findall () Метод возвращает список всех возникновений.

В чем разница между Re.match () и Re.Search ()?

Методы Re.Search (шаблон, строка) и Re.match (шаблон, строка) Оба возвращают объект совпадения первого матча. Тем не менее, Re.match () попытки соответствовать в начале строки во время Re.Search () Соответствует в любом месте строки.

Вы можете увидеть эту разницу в следующем коде:

>>> text = 'Slim Shady is my name'
>>> re.search('Shady', text)

>>> re.match('Shady', text)
>>>

Re.Search () Метод извлекает совпадение «Shady» подстрока как объект матча. Но если вы используете Re.match () Метод, нет совпадения и возвращаемого значения, потому что подстрока «Shady» не происходит в начале строки «Тонкий тенистый - мое имя» Отказ

Как использовать дополнительный аргумент флага?

Как вы видели в спецификации, Метод Match ( ) поставляется с необязательным третьим «Флаг» Аргумент:

re.match(pattern, string, flags=0)

Какова цель Флаги аргумент?

Флаги позволяют вам Контроль регулярная экспрессия двигателя. Поскольку регулярные выражения настолько мощны, они являются полезным способом включения и отключения определенных функций (например, следует ли игнорировать капитализацию при сопоставлении вашего Regex).

Синтаксис Имея в виду
Re.ascii. Если вы не используете этот флаг, специальные символы Regex Python \ W, \ W, \ b, \ b, \ d, \ d, \ s и \ s будут соответствовать символам Unicode. Если вы используете этот флаг, эти специальные символы будут соответствовать только символам ASCII – как указано имя.
реаяна Так же, как Re.Ascii
Re.debug. Если вы используете этот флаг, Python распечатает некоторую полезную информацию в оболочку, которая помогает отладить ваше регулярное выражение.
Re.ignorecase. Если вы используете этот флаг, двигатель Regex будет выполнять совпадение в случае сопоставления. Итак, если вы ищете класс символов [A-Z], он также будет соответствовать [A-Z].
Re.i. Так же, как Re.ignoRecase
Re.Locale Не используйте этот флаг – когда-либо. Он обесценился – идея состояла в том, чтобы выполнить сопоставление нечувствительности к регистру в зависимости от вашей текущей местности. Но это не надежно.
решающее значение Так же, как Re.Locale
Re.multiline. Этот флаг включает в следующую функцию: начало строки Regex ‘^’ совпадает в начале каждой строки (а не только в начале строки). То же самое относится и к концу строки Regex ‘$’, который сейчас соответствует также в конце каждой строки в многострочной строке.
решающее значение Так же, как Re.multiline.
re.dotall. Без использования этого флага точечное регулярное выражение. ‘ Соответствует всем персонажам, кроме символа Newline ‘\ N’. Переключите этот флаг, чтобы действительно сопоставить все символы, включая новенький символ.
республика Так же, как Re.dotall.
Re.verbose. Чтобы улучшить читаемость сложных регулярных выражений, вы можете позволить комментариям и (многострочному) форматированию самого Regeex. Это возможно с этим флагом: все пробелы и строки, которые начинаются с символа «#», игнорируются в Regex.
re.x. Так же, как Re.verbose

Вот как бы вы использовали его в практическом примере:

>>> text = 'Python is great!'
>>> re.search('PYTHON', text, flags=re.IGNORECASE)

Хотя ваше регулярное выражение «Питон» Это все шапки, мы игнорируем капитализацию, используя флаг Re.ignoRecase Отказ

Куда пойти отсюда?

Эта статья представила Re.match (шаблон, строка) Метод, который пытается сопоставить первое возникновение рисунка Regex в начале заданной строки и возвращает объект совпадения.

Питон взлетает в популярности. Есть два типа людей: те, кто понимает кодирование и те, кто этого не делает. Последнее будет иметь большие и большие трудности, участвующие в эпоху массового принятия и проникновения цифрового контента. Вы хотите ежедневно увеличить свои навыки Python, не вкладывая много времени?

Затем присоединитесь к моим списку электронной почты «Coffee Break Python» десятки тысяч амбициозных кодеров!

Инженеры Google, Facebook и Amazon являются регулярными мастерами. Если вы хотите стать одним, а также проверить нашу новую книгу: Самый умный способ изучить Python Regex (Amazon Kindle/Print, открывается на новой вкладке) Отказ

Работая в качестве исследователя в распределенных системах, доктор Кристиан Майер нашел свою любовь к учению студентов компьютерных наук.

Чтобы помочь студентам достичь более высоких уровней успеха Python, он основал сайт программирования образования Finxter.com Отказ Он автор популярной книги программирования Python One-listers (Nostarch 2020), Coauthor of Кофе-брейк Python Серия самооставленных книг, энтузиаста компьютерных наук, Фрилансера и владелец одного из лучших 10 крупнейших Питон блоги по всему миру.

Его страсти пишут, чтение и кодирование. Но его величайшая страсть состоит в том, чтобы служить стремлению кодер через Finxter и помогать им повысить свои навыки. Вы можете присоединиться к его бесплатной академии электронной почты здесь.