Задумывались ли вы, что является ключом к нахождению некоторого текста в документе или к тому, чтобы убедиться, что текст соответствует какому-либо формату, например, адресу электронной почты, и другим подобным операциям?
Ключ к таким операциям — регулярные выражения (регулярные выражения) . Давайте посмотрим некоторые определения для регулярных выражений. В Википедии регулярное выражение определяется следующим образом:
Последовательность символов, определяющих шаблон поиска, в основном для использования при сопоставлении с шаблоном или при сопоставлении строк, т. Е. Операции типа «найти и заменить». Эта концепция возникла в 1950-х годах, когда американский математик Стивен Клин формализовал описание обычного языка и стал широко использоваться в утилитах обработки текста Unix ed, редакторе и grep, фильтре.
Еще одно хорошее определение из регулярных выражений :
Регулярное выражение (для краткости регулярное выражение или регулярное выражение) — это специальная текстовая строка для описания шаблона поиска. Вы можете думать о регулярных выражениях как о подстановочных знаках на стероидах. Вы, вероятно, знакомы с символами подстановки, такими как * .txt, чтобы найти все текстовые файлы в файловом менеджере. Эквивалент регулярного выражения:. * \. Txt $
Я знаю, что концепция регулярных выражений все еще может звучать немного расплывчато. Итак, давайте рассмотрим несколько примеров регулярных выражений, чтобы лучше понять концепцию.
Примеры регулярных выражений
В этом разделе я покажу вам несколько примеров регулярных выражений, которые помогут вам лучше понять концепцию.
Скажи, что у тебя было это регулярное выражение:
1
|
/abder/
|
Это просто говорит нам, чтобы соответствовать только слово abder
.
Как насчет этого регулярного выражения?
1
|
/a[nr]t/
|
Вы можете прочитать это регулярное выражение следующим образом: найдите текстовый шаблон, в котором первая буква является a
а последняя — t
, и между этими буквами идет либо n
либо r
. Таким образом, соответствующие слова — ant
и art
.
Позвольте мне дать вам небольшой тест на данный момент. Как бы вы написали регулярное выражение, которое начинается с ca
и заканчивается одним или всеми из следующих символов tbr
? Да, это регулярное выражение можно записать следующим образом:
1
|
/ca[tbr]/
|
Если вы видите регулярное выражение, начинающееся с округлого акцента ^
, это означает совпадение строки, начинающейся со строки, упомянутой после ^
. Итак, если у вас есть регулярное выражение ниже, оно соответствует строке, которая начинается с This
.
1
|
/^This/
|
Таким образом, в следующей строке:
1
2
3
|
My name is Abder
This is Abder
This is Tom
|
Основываясь на регулярном выражении /^This/
, будут сопоставлены следующие строки:
1
2
|
This is Abder
This is Tom
|
Что если мы хотим сопоставить строку, которая заканчивается какой-то строкой? В этом случае мы используем знак доллара $
. Вот пример:
1
|
Abder$
|
Таким образом, в приведенной выше строке (три строки) следующие шаблоны будут сопоставлены с использованием этого регулярного выражения:
1
2
|
My name is Abder
This is Abder
|
Что вы думаете об этом регулярном выражении?
1
|
^[AZ][az]
|
Я знаю, что это может показаться сложным на первый взгляд, но давайте рассмотрим это по частям.
Мы уже видели, что такое акцент при обтекании. Это означает совпадение строки, которая начинается с некоторой строки. [AZ]
относится к заглавным буквам. Итак, если мы прочитаем эту часть регулярного выражения: ^[AZ]
, это говорит нам о соответствии строки, которая начинается с заглавной буквы. Последняя часть, [az]
, означает, что после нахождения строки, которая начинается с заглавной буквы, за ней следуют строчные буквы из алфавита.
Итак, какая из следующих строк будет сопоставлена с помощью этого регулярного выражения? Если вы не уверены, вы можете использовать Python, как мы увидим в следующем разделе, чтобы проверить ваш ответ.
1
2
3
4
|
abder
Abder
ABDER
ABder
|
Регулярные выражения — это очень широкая тема, и эти примеры просто дают вам представление о том, что они из себя представляют и почему мы их используем.
Хорошая ссылка, чтобы узнать больше о регулярных выражениях и увидеть больше примеров — RexEgg .
Регулярные выражения в Python
Давайте теперь перейдем к забавной части. Мы хотим посмотреть, как работать с некоторыми из приведенных выше регулярных выражений в Python. Модуль, который мы будем использовать для работы с регулярными выражениями в Python, является модулем re
.
Первый пример был о поиске слова abder
. В Python мы бы сделали это следующим образом:
1
2
3
4
|
import re
text = ‘My name is Abder’
match_pattern = re.match(r’Abder’, text)
print match_pattern
|
Если вы запустите приведенный выше скрипт Python, вы получите вывод: None
!
Скрипт работает просто отлично, но проблема в том, как работает функция match()
. Если мы вернемся к документации по re
модулю, это то, что делает функция match()
:
Если ноль или более символов в начале строки соответствуют шаблону регулярного выражения, вернуть соответствующий объект соответствия. Вернуть None, если строка не соответствует шаблону; обратите внимание, что это отличается от совпадения нулевой длины.
Ага, из этого мы можем видеть, что match()
вернет результат, только если найдет совпадение в начале строки.
Вместо этого мы можем использовать функцию search()
, которая основана на документации:
Просмотрите строку и найдите первое место, где шаблон регулярного выражения производит совпадение, и верните соответствующий объект сопоставления. Вернуть None, если ни одна позиция в строке не соответствует шаблону; обратите внимание, что это отличается от поиска совпадения нулевой длины в некоторой точке строки.
Итак, если мы напишем приведенный выше скрипт, но с search()
вместо match()
, мы получим следующий вывод:
<_sre.SRE_Match object at 0x101cfc988>
То есть match object
соответствия был возвращен.
Если мы хотим вернуть результат (соответствие строки), мы используем функцию group()
. Если мы хотим увидеть все совпадения, мы используем group(0)
. Таким образом:
print match_pattern.group(0)
вернет вывод: Abder
.
Если мы возьмем второе регулярное выражение в предыдущем разделе, то есть /a[nr]t/
, оно может быть написано на Python следующим образом:
1
2
3
4
|
import re
text = ‘This is a black ant’
match_pattern = re.search(r’a[nr]t’, text)
print match_pattern.group(0)
|
Выходные данные для этого скрипта: ant
.
Вывод
Статья становится длиннее, и тема регулярных выражений в Python, безусловно, занимает более одной статьи, если не отдельную книгу.
Эта статья, однако, должна дать вам быстрый старт и уверенность, чтобы войти в мир регулярных выражений в Python. Вы можете обратиться к документации, чтобы узнать больше об этом модуле и о том, как углубиться в тему.