Изображение по автору
У меня есть отношения любви и ненависти к регулярным выражениям (RegEx), особенно в Python. Мне нравится, как вы можете извлекать или сопоставлять строки без написания множества логических функций. Это даже лучше, чем функция поиска String.
Что мне не нравится, так это то, как мне трудно изучать и понимать шаблоны RegEx. Я могу справиться с простым сопоставлением строк, таким как извлечение всех буквенно-цифровых символов и очистка текста для задач НЛП. Все становится сложнее, когда дело доходит до извлечения IP-адресов, электронных писем и идентификаторов из нежелательного текста. Вы должны написать сложный шаблон RegEx String, чтобы извлечь требуемый элемент.
Чтобы упростить сложные задачи RegEx, мы узнаем о простом пакете Python, называемом предварительное выражение. Кроме того, мы также рассмотрим несколько примеров извлечения дат и электронных писем из длинной строки текста.
Предварительное выражение — это высокоуровневый API, построенный поверх модуля `re`. Это RegEx без сложных шаблонов RegEx, что позволяет любому программисту легко понять и запомнить регулярные выражения. Кроме того, вам не нужно группировать шаблоны или экранировать метасимволы, и это модульно.
Вы можете просто установить библиотеку с помощью PIP.
pip install pregex
Чтобы протестировать мощную функциональность PRegEx, мы будем использовать модифицированный пример кода из документации.
В приведенном ниже примере мы извлекаем URL-адрес HTTP или адрес IPv4 с номером порта. Нам не нужно создавать для этого сложную логику. Мы можем использовать встроенные функции HttpUrl и IPv4.
- Создайте номер порта, используя AnyDigit(). Первая цифра порта не должна быть нулем, а следующие три цифры могут быть любым числом.
- Используйте Both(), чтобы добавить несколько логик для извлечения URL-адреса HTTP или IP-адреса с номером порта.
from pregex.core.pre import Pregex
from pregex.core.classes import AnyDigit
from pregex.core.operators import Either
from pregex.meta.essentials import HttpUrl, IPv4 port_number = (AnyDigit() - '0') + 3 * AnyDigit() pre = Either( HttpUrl(capture_domain=True, is_extensible=True), IPv4(is_extensible=True) + ':' + port_number
)
Мы будем использовать длинную строку текста с символами и описаниями.
text = """IPV4--192.168.1.1:8000-- address--https://www.abid.works-- website--https://kdnuggets.com--text"""
Прежде чем мы извлечем совпадающую строку, давайте посмотрим на шаблон RegEx.
regex_pattren = pre.get_pattern()
print(regex_pattren)
Результат
Как мы видим, трудно прочитать или даже понять, что происходит. Вот где сияет PRegEx. Чтобы предоставить вам удобный API для выполнения сложных задач с регулярными выражениями.
(?:https?://)?(?:www.)?(?:[a-zdA-Z][a-z-dA-Z]{,61}[a-zdA-Z].)*([a-zdA-Z][a-z-dA-Z]{,61}[a-zdA-Z]).[a-z]{2,6}(?::d{1,4})?(?:/[!-.0-~]+)*/?(?:(?=[!-/[-`{-~:-@])|(?=w))|(?:(?:d|[1-9]d|1d{2}|2(?:[0-4]d|5[0-5])).){3}(?:d|[1-9]d|1d{2}|2(?:[0-4]d|5[0-5])):[1-9]d{3}
Как и в случае с `re.match`, мы будем использовать `.get_matches(text)` для извлечения необходимой строки.
results = pre.get_matches(text)
print(results)
Результат
Мы извлекли как IP-адрес с номером порта, так и два веб-URL.
['192.168.1.1:8000', 'https://www.abid.works', 'https://kdnuggets.com']
Давайте рассмотрим пару примеров, где мы можем понять весь потенциал PRegEx.
В этом примере мы будем извлекать определенные типы шаблонов дат из текста ниже.
text = """ 04-15-2023 2023-08-15 06-20-2023 06/24/2023 """
Используя Exactly() и AnyDigit(), мы создадим день, месяц и год даты. День и месяц состоят из двух цифр, а год состоит из 4 цифр. Они разделены тире «-».
После создания шаблона мы запустим `get_match`, чтобы извлечь соответствующую строку.
from pregex.core.classes import AnyDigit
from pregex.core.quantifiers import Exactly day_or_month = Exactly(AnyDigit(), 2) year = Exactly(AnyDigit(), 4) pre = ( day_or_month + "-" + day_or_month + "-" + year
) results = pre.get_matches(text)
print(results)
Результат
['04-15-2023', '06-20-2023']
Давайте посмотрим на шаблон RegEx, используя функцию `get_pattern()`.
regex_pattren = pre.get_pattern()
print(regex_pattren)
Результат
Как мы видим, у него простой синтаксис RegEx.
d{2}-d{2}-d{4}
Второй пример немного сложнее, в нем мы будем извлекать действительные адреса электронной почты из нежелательного текста.
text = """ user1@abid.works editorial@@kdnuggets.com lover@python.gg. editorial1@kdnuggets.com """
- Создайте пользователь шаблон с `OneOrMore()`. Мы будем использовать `AnyButFrom()`, чтобы удалить «@» и пробел из логики.
- Подобно пользователь узор, который мы создаем Компания шаблон, удалив дополнительный символ «.» из логики.
- Для того, чтобы получить домен, мы будем использовать `MatchAtLineEnd()`, чтобы начать поиск с конца с любыми двумя или более символами, кроме «@», пробела и точки.
- Объедините все три, чтобы создать окончательный узор: пользователь@компания.домен.
from pregex.core.classes import AnyButFrom
from pregex.core.quantifiers import OneOrMore, AtLeast
from pregex.core.assertions import MatchAtLineEnd user = OneOrMore(AnyButFrom("@", ' '))
company = OneOrMore(AnyButFrom("@", ' ', '.'))
domain = MatchAtLineEnd(AtLeast(AnyButFrom("@", ' ', '.'), 2)) pre = ( user + "@" + company + '.' + domain
) results = pre.get_matches(text)
print(results)
Результат
Как мы видим, PRegEx определил два действительных адреса электронной почты.
['user1@abid.works', 'editorial1@kdnuggets.com']
Примечание: оба примера кода являются модифицированными версиями работы PyCoach.
Если вы специалист по данным, аналитик или энтузиаст НЛП, вам следует использовать PRegEx для очистки текста и создания простой логики. Это снизит вашу зависимость от фреймворков НЛП, поскольку большую часть сопоставления можно выполнить с помощью простого API.
В этом мини-руководстве мы узнали о пакете Python PRegEx и его вариантах использования с примерами. Вы можете узнать больше, прочитав официальный документации или решение Wordline проблема с использованием программируемых регулярных выражений.
Абид Али Аван (@ 1abidaliawan) — сертифицированный специалист по анализу данных, который любит создавать модели машинного обучения. В настоящее время он занимается созданием контента и ведением технических блогов по технологиям машинного обучения и обработки данных. Абид имеет степень магистра в области управления технологиями и степень бакалавра в области телекоммуникаций. Его видение состоит в том, чтобы создать продукт искусственного интеллекта с использованием графовой нейронной сети для студентов, борющихся с психическими заболеваниями.
- SEO-контент и PR-распределение. Получите усиление сегодня.
- Платоблокчейн. Интеллект метавселенной Web3. Расширение знаний. Доступ здесь.
- Источник: https://www.kdnuggets.com/2023/02/python-string-matching-without-complex-regex-syntax.html?utm_source=rss&utm_medium=rss&utm_campaign=python-string-matching-without-complex-regex-syntax
- 1
- 11
- 7
- 9
- a
- О нас
- дополнительный
- адрес
- адреса
- AI
- Все
- аналитик
- и
- API
- ниже
- Лучшая
- Немного
- блоги
- строить
- Строительство
- построенный
- встроенный
- под названием
- случаев
- определенный
- Сертифицированные
- персонаж
- символы
- классов
- Уборка
- код
- COM
- Компания
- комплекс
- содержание
- Основные
- Пара
- Создайте
- Создающий
- создание
- В настоящее время
- данным
- наука о данных
- ученый данных
- Время
- Финики
- день
- сделка
- Степень
- Зависимость
- Digit
- цифры
- домен
- Dont
- или
- Писем
- Проект и
- энтузиаст
- особенно
- предметы первой необходимости
- Эфир (ETH)
- Даже
- точно,
- пример
- Примеры
- Кроме
- выражения
- извлечение
- несколько
- окончательный
- First
- фокусировка
- каркасы
- от
- полный
- функция
- функциональность
- Функции
- Более того
- получить
- будет
- график
- Графическая нейронная сеть
- группы
- Жесткий
- имеет
- Как
- HTML
- HTTPS
- идентифицированный
- болезнь
- Импортировать
- in
- устанавливать
- IP
- IP-адрес
- IP-адреса
- IT
- КДнаггетс
- УЧИТЬСЯ
- узнали
- изучение
- Библиотека
- Длинное
- посмотреть
- любят
- машина
- обучение с помощью машины
- сделать
- управление
- мастер
- Совпадение
- согласование
- психический
- Психические заболевания
- Мета
- Модели
- модифицировало
- модульный
- модуль
- Месяц
- БОЛЕЕ
- самых
- с разными
- сеть
- нервный
- нейронной сети
- следующий
- НЛП
- номер
- Официальный представитель в Грузии
- Операторы
- пакет
- шаблон
- паттеранами
- выполнения
- Платон
- Платон Интеллектуальные данные
- ПлатонДанные
- потенциал
- мощный
- Проблема
- Продукт
- профессиональный
- Программист
- обеспечивать
- Питон
- Читать
- Reading
- уменьшить
- регулярный
- отношения
- помнить
- удаление
- удаление
- обязательный
- Итоги
- Run
- Наука
- Ученый
- Поиск
- Во-вторых
- должен
- просто
- просто
- Решение
- Space
- Начало
- Stop
- Борющийся
- Студенты
- такие
- синтаксис
- задачи
- Технический
- технологии
- Технологии
- телекоммуникация
- тестXNUMX
- Ассоциация
- вещи
- три
- в
- топ
- учебник
- понимать
- URL
- использование
- Информация о пользователе
- видение
- Web
- Что
- Что такое
- КТО
- будете
- без
- Работа
- работает
- записывать
- письмо
- год
- ВАШЕ
- зефирнет
- нуль