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

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

Регулярные выражения Python позволяют сопоставить текст с указанным шаблоном. Узнайте о Python Regex Match (), поиск (), Sub () Функции, модуль Python Re.

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

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

Текст – одна из основных форм данных и людей, использующих текст для связи и экспрессии, таких как на веб-страницах, сообщениях в блоге, документах, Twitter/RSS-каналам и т. Д. Это, где регулярные выражения удобны и мощные. Будьте оно фильтрация данных с веб-страниц, аналитика данных или траекторий – регулярные выражения являются предпочтительным инструментом для выполнения этих задач. Регулярные выражения делают задачи обработки текста, такие как ( NLP ) проще, тем самым уменьшая усилия, время и ошибки, которые связаны при написании ручных скриптов.

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

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

Что такое регулярное выражение?

А регулярное выражение (Re или Regex) – это последовательность символов, которая описывает текстовые модели. Используя регулярные выражения, мы можем сопоставить входные данные для определенных шаблонов (поиск AKA), извлечь соответствующие строки (фильтрация, расщепление), а также заменить вхождения структур с заменами, все с минимальным количеством кода.

Большинство языков программирования имеют встроенную поддержку для определения и работы с регулярными выражениями. Perl, Python & Java – это некоторые заметные языки программирования с первоклассной поддержкой регулярных выражений. Стандартные функции библиотеки на таких языках программирования обеспечивают высокопроизводительные, надежные и (почти) беспущенные реализации операций регулярных выражений (поиск, фильтрация и т. Д.), Что позволяет легко быстро производить высококачественные приложения, которые эффективно обрабатывают текст Отказ

Начало работы с регулярными выражениями Python

Python предоставляет встроенный модуль, называемый Re иметь дело с регулярными выражениями. Чтобы импортировать Python’s Re Пакет, используйте:

import re

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

В поисках шаблонов в строке

Одной из наиболее распространенных задач в обработке текста является поиск, если строка содержит определенный шаблон или нет. Например, вы можете выполнить операцию в строке, основанную на условиях, что строка содержит номер. Или, вы можете проверить пароль, обеспечивая его номера и специальные символы. Операция re pratch of Re предоставляет эту возможность.

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

Функция Re.match ()

Re.match () Функция проверяет, если Re соответствуют в начале строки. Например, инициализируйте переменную «текст» с некоторым текстом следующим образом:

text = ['Charles Babbage is regarded as the father of computing.', 'Regular expressions are used in search engines.']

Давайте напишем простое регулярное выражение, которое соответствует строке любой длины, содержащей все, если она начинается с буквы C:

regex = r"C.*"

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

Мы можем проверить, если строки в тексте соответствуют Regex, как показано ниже:

for line in text:
  ans = re.match(regex, line)
  type(ans)
  if(ans):
    print(ans.group(0))

Продолжай и запустите этот код. Ниже приведен скриншот сеанса Python с этим кодом.

Первая строка совпадает с этим Regex, поскольку это статистика с символом «C», тогда как вторая строка начинается с символа «R» и не соответствует регелесу. Функция «Match» возвращает _sre.sre_match объект, если найден матч, иначе он возвращает Нет Отказ

В Python регулярные выражения указываются как сырые строковые литералы. Сырая строковая буквальная имеет префикс R и сразу же сопровождается строковым литералом в цитатах. В отличие от нормальных строковых литералов, Python не интерпретирует специальные символы, такие как '\' Внутри сырых строковых литералов. Это важно и необходимо, поскольку специальные символы имеют различное значение в синтаксисе регулярного выражения, чем то, что они делают в стандартных строковых литералах Python. Больше на это позже.

После того, как совпадение найдено, мы можем получить часть строки, которая соответствует шаблону, используя Группа () Метод на возвращенном Матч объект. Мы можем получить всю подходящую строку, передавая 0 как аргумент.

ans.group(0)

Образец вывода:

Charles Babbage is regarded as the father of computing.

Строительные блоки регулярных выражений

В этом разделе мы рассмотрим элементы, которые составляют Regex и как построен регулярные вещества. REGEX содержит группы, и каждая группа содержит различные спецификаторы, такие как классы символов, повторители, идентификаторы и т. Д. Спецификаторы – это строки, которые соответствуют определенным типам рисунка и имеют свой собственный формат для описания желаемого рисунка. Давайте посмотрим на общие спецификаторы:

Идентификаторы

Идентификатор соответствует подмножеству символов E.g., строчные буквы, числовые цифры, пробел и т. Д. Regex предоставляет список удобных идентификаторов для соответствия различных подмножествах. Некоторые часто используемые идентификаторы:

  • цифры (числовые символы) в строке
  • что-нибудь, кроме цифра
  • Белое пространство (например, пространство, вкладка и т. Д. ,.)
  • что-нибудь, кроме пространства
  • Письма/алфавиты и цифры
  • что-нибудь, кроме письмо
  • Любой персонаж, который может отделить слова (например, пространство, дефис, толстой кишки и т. Д. ,.)
  • любой символ, кроме новой линии. Следовательно, это называется оператором подстановки. Таким образом, «. *» Будет соответствовать любому персонажу, любому Nuber Times.

Примечание: в приведенном выше примере Regex и все остальные в этом разделе мы опускаем ведущую R от строковой буквы Regex для ради читабельности. Любой буквальный приведенный здесь должен быть объявлен сырой строковой буквальной буквами при использовании в коде Python.

Повторители

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

`*` Символ

Оператор Звездочки указывает на 0 или более повторений предыдущего элемента, как можно больше. «ab *» будет соответствовать «A», «ab», «ABB» или «A», а затем любое количество B.

`+` Символ

Оператор Plus указывает на 1 или более повторений предыдущего элемента, как можно больше. «AB +» будет соответствовать «A», «ab», «ABB» или «A», а затем 1 вхождение «B»; Это не будет соответствовать «a».

`?` Символ

Этот символ указывает предыдущий элемент с большинством, то есть, он может или не может присутствовать в строке, подходящей. Например, «ab +» будет соответствовать «A» и «AB».

`{N}` кудрявые скобки

Кредиковые брекеты указывают предыдущий элемент, который должен соответствовать ровно N раз. B {4} будет сопоставлять ровно четырех символов «B», но не более/менее 4.

Символы *, + ,? и {} называются ретрансляторами, поскольку они указывают количество раз, когда предыдущий элемент повторяется.

Разные спецификаторы

`[] Квадратные скобки

Квадратные брекеты соответствуют любому одному символу, заключенному внутри него. Например, [AEIOU] будет соответствовать любому из строчных гласных гласных, когда [A-Z] будет соответствовать любому символу из A-Z (чувствителен к регистру). Это также называется классом персонажа.

`|` “

Вертикальная полоса используется для разделения альтернатив. Фото | Фото спички либо «фото» или «фото».

`^` Символ

Символ CARET указывает положение для матча, в начале строки, кроме при использовании внутри квадратных скобок. Например, «^ i» будет сочетать строку, начиная с «I», но не сопоставлю строк, которые не имеют «я» в начале. Это, по сути, то же самое, что и функциональность, предоставленные Re.match Функция против Re.Search функция.

При использовании в качестве первого символа внутри класса символов он инвертирует соответствующий набор символов для класса символов. Например, «[^ aeiou]» будет соответствовать любому символу, отличным от A, E, I, O или U.

Символ `$`

Символ доллара указывает положение для матча, в конце строки.

`()” Скобки

Скобка используется для группировки разных символов Re, действовать как один блок. ([A-Z] \ D +) будет сопоставить шаблоны, содержащие A-Z, а затем любая цифра. Весь матч рассматривается как группа и может быть извлечена из строки. Больше на это позже.

Типичные случаи использования для регулярных выражений Python

Теперь мы обсудили строительные блоки письма RE. Давайте сделаем несколько практиц на написание Regex.

Функция Re.match () Revisited

Можно сопоставить буквы, как заглавные, так и строчные буквы, используя функцию совпадения.

ans = re.match(r"[a-zA-Z]+", str)
print(ans.group(0))

Вышеуказанное Regex соответствует первым словом, найденным в строке. Оператор `+` указывает, что строка должна иметь хотя бы один символ.

Образец вывода:

The

Как видите, Regeex соответствует первым словом, найденным в строке. После слова «», есть пространство, которое не рассматривается как письмо. Итак, совпадение останавливается, и функция возвращает только первый найден матч. Допустим, строка начинается с номера. В этом случае Матч () Функция возвращает нулевое значение, хотя строка имеет буквы после количества. Например,

str = "1837 was the year when Charles Babbage invented the Analytical Engine"
ans = re.match(r"[a-zA-Z]+", str)
type(ans)

Приведенное выше REGEX возвращает NULL, так как функция Match возвращает только первый элемент в строке. Хотя строка содержит алфавиты, он предшествует номер. Поэтому Матч () Функция возвращает NULL. Эту проблему можно избежать использования Поиск () функция.

Функция Re.Search ()

Поиск () Функция соответствует указанному рисунку в строке, аналогично Матч () функция. Разница в том, что Поиск () Функция соответствует шаблону глобально, в отличие от сопоставления только первого элемента строки. Давайте попробуем тот же пример, используя Поиск () функция.

str =  "1837 was the year when Charles Babbage invented the Analytical Engine"
ans = re.search(r"[a-zA-Z]+", str)
type(ans)

Образец вывода:

was

Это потому, что Поиск () Функция возвращает совпадение, хотя строка не запускается с алфавита, но найден в другом месте в строке.

Соответствующие строки от начала и от конца

Мы можем использовать Regex, чтобы найти, если строка начинается с определенного шаблона с использованием оператора CARET ^ Отказ Точно так же $ Оператор доллара используется для соответствия, если строка заканчивается данным рисунком. Давайте напишем Regex, чтобы понять это:

str =  "1937 was the year when Charles Babbage invented the Analytical Engine"
if re.search(r"^1837", str):
    print("The string starts with a number")
else:
    print("The string does not start with a number")
type(ans)

Образец вывода:

The string starts with a number

Функция Re.Sub ()

Мы исследовали, используя Regex, чтобы найти шаблон в строке. Давайте перейдем вперед, чтобы найти, как заменить текст в строке. Для этого мы используем функцию Sub (). sub () Функция поиска определенного шаблона в строке и заменяет ее новым шаблоном.

str = "Analytical Engine was invented in the year 1837"
ans = re.sub(r"Analytical Engine", "Electric Telegraph", str)
print(ans)

Как видите, первый параметр sub () Функция – это регулярное выражение, которое ищет шаблон для замены. Второй параметр содержит новый текст, который вы хотите заменить старую. Третий параметр – это строка, на которой выполняется операция «подразделения».

Образец вывода:

Electric Telegraph was invented in the year 1837

Писать регес с идентификаторами

Давайте понять, используя Regex, содержащие идентификаторы, с примером. Чтобы удалить цифры в строке, мы используем ниже Regex:

str = "Charles Babbage invented the Analytical Engine in the year 1937"
ans = re.sub(r"\d", "", str)
print(ans)

Вышеуказанный скрипт располагается для цифр в строке с использованием идентификатора «\ D» и заменяет его пустой строкой.

Образец вывода:

Charles Babbage invented the Analytical Engine in the year

Разделение струны

Re Пакет предоставляет Сплит () Функция для разделения струн. Эта функция возвращает список разделенных токенов. Например, следующая функция «разделения» разбивает строку слов, когда запятая найдена:

str = "Charles Babbage was considered to be the father of computing, after his invention of the Analytical Engine, in 1837"
ans = re.split(r"\,", str)
print(ans)

Образец вывода:

['Charles Babbage was considered to be the father of computing', 'after his invention of the Analytical Engine', 'in 1837']

Функция Re.findall ()

findall () Функция Возвращает список, содержащий все соответствующие высказывания в строке.

Давайте напишем скрипт, чтобы найти тип домена из списка реализации идентификатора электронной почты findall () Функция:

result=re.findall(r'@\w+.\w+','joe.sam@gmail.com, reema@yahoo.in, demo.user@samskitchen.com)
print result

Образец вывода:

['@gmail.com', '@yahoo.in', '@samskitchen.com']

Заключение

В этой статье мы поняли, какие регулярные выражения и о том, как они могут быть построены из своих фундаментальных строительных блоков. Мы также смотрели на Re Модуль в Python и его методы для используемого регулярных выражений. Регулярные выражения являются простым, но мощным инструментом в обработке текста, и мы надеемся, что вам понравилось узнать о них столько, сколько мы создали эту статью. Где вы могли бы использовать Regex в ваших проектах по работе/хобби? Оставьте комментарий ниже.