15 примеров обработки текста с помощью Regex

Регулярные выражения (regex) – это мощный инструмент для сопоставления шаблонов и обработки текста в Python. Хотя основы regex хорошо известны, существуют продвинутые техники и сложные шаблоны, которые могут поднять ваши навыки работы с текстом на новую высоту. В этой статье мы рассмотрим 15 сложных примеров использования regex в Python, демонстрирующих его универсальность и эффективность при решении различных задач обработки текста.

Пример 1: Извлечение URL-адресов

Извлечение URL-адресов из заданного текста является распространенной задачей при веб-скреппинге и извлечении данных.

import re

text = "Visit my website at https://example.com or check out the latest news at http://news.example.com"

url_pattern = r"https?://(?:[-\w.]|(?:%[\da-fA-F]{2}))+"
urls = re.findall(url_pattern, text)

print(urls)

В этом примере мы определяем регекс-шаблон r “https?://(?:[-\w.]|(?:%[\da-fA-F]{2}))+ для поиска URL. Шаблон позволяет использовать протоколы http и https, а также фиксирует доменное имя и путь. Используя re.findall(), мы извлекаем все URL из заданного текста.

Пример 2: Проверка адресов электронной почты

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

import re

def is_valid_email(email):
    email_pattern = r"^[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Z|a-z]{2,}$"
    return re.match(email_pattern, email) is not None

print(is_valid_email("john.doe@example.com"))
print(is_valid_email("invalid_email"))

В этом фрагменте кода мы определяем regex-шаблон r”^[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+.[A-Z|a-z]{2,}$” для проверки адресов электронной почты. Шаблон гарантирует, что адрес электронной почты имеет правильный формат с правильной локальной частью, доменным именем и доменом верхнего уровня. Функция re.match() проверяет, соответствует ли предоставленный адрес электронной почты шаблону.

Пример 3: Извлечение хэштегов

Извлечение хэштегов из содержимого социальных сетей или текстовых данных является распространенной потребностью.

import re

text = "Just enjoying a #beautiful day with #friends in #nature"

hashtag_pattern = r"#\w+"
hashtags = re.findall(hashtag_pattern, text)

print(hashtags)

Определим шаблон r”#\w+” . Шаблон начинается с символа # и захватывает один или несколько буквенно-цифровых символов (\w+). Используя re.findall(), мы извлекаем все хэштеги из заданного текста.

Пример 4: Разбор атрибутов HTML

Давайте извлечем атрибут href из тега:

import re

html = '<a href="https://example.com">Visit our website</a>'

href_pattern = r'href="([^"]*)"'
href = re.search(href_pattern, html).group(1)

print(href)

В этом фрагменте кода мы используем регекс-шаблон r’href=”([^”])”‘ для соответствия значению атрибута href в теге ([^”]*) захватывает любой символ, кроме двойной кавычки, что позволяет нам извлечь значение атрибута. Используя re.search() и обращаясь к найденной группе с помощью .group(1), мы извлекаем значение href.

Пример 5: Токенизация слов

Токенизация слов является фундаментальным шагом в задачах обработки естественного языка (NLP). Regex может помочь нам произвести токенизацию слов на основе определенных критериев. Давайте выделим слова, исключая цифры и знаки препинания:

import re

text = "Hello! How are you today 06/12/2023? I hope everything is going well. Have a great day."

word_pattern = r"\b(?![\d.!?])\w+\b"
words = re.findall(word_pattern, text)

print(words)

В этом примере мы определяем regex-шаблон r”\b(?![\d.!?])\w+\b” для поиска слов. Шаблон использует отрицательный заголовок (?![\d.!?]), чтобы исключить цифры и знаки препинания. Маркеры \b обеспечивают совпадение полных слов. Используя re.findall(), мы извлекаем все слова из заданного текста.

Пример 6: Удаление лишних пробелов

Очистка и нормализация текста часто подразумевает удаление лишних пробельных символов. Regex предоставляет эффективный способ достижения этой цели. Давайте удалим лишние пробелы из предложения:

import re

text = "This    sentence   has   extra   whitespaces."

clean_text = re.sub(r"\s+", " ", text)

print(clean_text)

В этом фрагменте кода мы используем регекс-шаблон r”\s+” для поиска одного или нескольких пробелов подряд. Функция re.sub() заменяет все вхождения шаблона одним пробелом, эффективно удаляя лишние пробелы из предложения.

Пример 7: Разделение текста на предложения

Разделение текста на предложения – распространенная задача в обработке естественного языка. Давайте разделим абзац на предложения с помощью regex:

import re

text = "Hello! How are you today? I hope everything is going well. Have a great day."

sentence_pattern = r"(.*?[.!?])"
sentences = re.findall(sentence_pattern, text)

print(sentences)

В этом примере мы определяем регекс-шаблон r”(.?[.!?])” для поиска предложений. (.?[.!?]) захватывает любой символ (не жадный), пока не встретится точка, восклицательный или вопросительный знак. Используя re.findall(), мы извлекаем все предложения из заданного текста на основе определенного шаблона.

Пример 8: Извлечение дат

Извлечение дат из текстовых данных может быть полезным в различных приложениях. Давайте посмотрим, как regex может помочь нам извлечь даты в формате “MM-DD-YYYY”:

import re

text = "The event will take place on 06-12-2023. Don't miss it!"

date_pattern = r"\b\d{2}-\d{2}-\d{4}\b"
dates = re.findall(date_pattern, text)

print(dates)

В этом фрагменте кода мы определяем регекс-шаблон r”\b\d{2}-\d{2}-\d{4}\b” для поиска дат в формате “MM-DD-YYYY”. Шаблон состоит из маркеров \b для поиска полных дат, затем \d{2}-\d{2}-\d{4} для поиска месяца, дня и года. Используя re.findall(), мы извлекаем все даты из данного текста.

Пример 9: Извлечение IP-адресов

Извлечение IP-адресов из текстовых данных часто требуется в задачах, связанных с сетью. Давайте извлечем IP-адреса из файла журнала с помощью regex:

import re

log = "Client IP: 192.168.0.1 - Request received from 10.0.0.1 - Server IP: 172.16.0.1"

ip_pattern = r"\b(?:\d{1,3}\.){3}\d{1,3}\b"
ips = re.findall(ip_pattern, log)

print(ips)

В этом примере мы определяем регекс шаблон r”\b(?:\d{1,3}.){3}\d{1,3}\b” для поиска IP-адресов. Шаблон содержит четыре набора цифр (от 1 до 3 цифр каждый), разделенных периодами. Используя re.findall(), мы извлекаем все IP-адреса из файла журнала

Пример 10: Поиск дубликатов слов

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

import re

text = "This is is a test sentence to find duplicate duplicate words."

duplicate_pattern = r"\b(\w+)\b(?=.*\b\1\b)"
duplicates = re.findall(duplicate_pattern, text)

print(duplicates)

В этом фрагменте кода мы используем регекс-шаблон r”\b(\w+)\b(?=.\b\1\b)” для поиска дубликатов слов. Шаблон выделяет отдельные слова с помощью (\w+) и использует положительное опережение (?=.\b\1\b), чтобы убедиться, что то же самое слово снова появится в предложении. Используя re.findall(), мы извлекаем все дублирующиеся слова из данного предложения.

Пример 11: Удаление HTML-тегов

Удаление HTML-тегов из текстовых данных – распространенный этап предварительной обработки при веб-скреппинге и очистке данных. Давайте удалим HTML-теги из заданной строки с помощью regex:

import re

html = "<h1>Welcome to the Regex World</h1><p>Enjoy the power of regex!</p>"

clean_text = re.sub(r"<.*?>", " ", html)

print(clean_text)

В этом примере мы используем регекс-шаблон r”<.?>” для поиска HTML-тегов. Шаблон встречает любой символ (.) один или несколько раз () между < и >, эффективно захватывая HTML-теги. Функция re.sub() заменяет все вхождения шаблона пустой строкой, эффективно удаляя HTML-теги из строки.

Пример 12: Извлечение цитируемого текста

Извлечение закавыченного текста из заданной строки может быть полезно в различных приложениях. Давайте извлечем закавыченный текст с помощью regex:

import re

text = 'She said, "Life is short, enjoy every moment"'

quote_pattern = r'"([^"]*)"'
quotes = re.findall(quote_pattern, text)

print(quotes)

В этом фрагменте кода мы определяем regex-шаблон r'”([^”])”) для поиска текста, заключенного в кавычки. Шаблон захватывает любой символ, кроме двойной кавычки ([^”]) между двойными кавычками. Используя re.findall(), мы извлекаем весь закавыченный текст из заданной строки.

Пример 13: Извлечение времени из текста

Извлечение информации о времени из текстовых данных может быть полезным в различных приложениях. Давайте извлечем информацию о времени в формате “ЧЧ:ММ” из заданного текста:

import re

text = "The meeting will start at 14:30. Please be on time."

time_pattern = r"\b\d{2}:\d{2}\b"
times = re.findall(time_pattern, text)

print(times)

В этом примере мы определяем регекс-шаблон r”\b\d{2}:\d{2}\b” для поиска времени в формате “ЧЧ:ММ”. Шаблон фиксирует два набора цифр (\d{2}), разделенных двоеточием. Используя re.findall(), мы извлекаем всю информацию о времени из данного текста.

Пример 14: Удаление небуквенно-цифровых символов

Удаление небуквенно-цифровых символов из текста может быть полезно для задач очистки и предварительной обработки данных. Давайте удалим небуквенно-цифровые символы из предложения с помощью regex:

import re

text = "This sentence includes !@#$% special characters *&^."

clean_text = re.sub(r"[^a-zA-Z0-9\s]", "", text)

print(clean_text)

В этом фрагменте кода мы используем regex-шаблон r”[^a-zA-Z0-9\s]” для поиска неалфавитно-цифровых символов. Символ ^ в квадратных скобках отрицает класс символов, эффективно сопоставляя все, что не является буквой, цифрой или пробелом. Функция re.sub() заменяет все вхождения шаблона пустой строкой, эффективно удаляя небуквенно-цифровые символы из предложения.

Пример 15: Извлечение номеров социального страхования

Извлечение номеров социального страхования (SSN) из текстовых данных может быть необходимо в некоторых приложениях.

import re

text = "The SSN of John Doe is 123-45-6789."

ssn_pattern = r"\d{3}-\d{2}-\d{4}"
ssns = re.findall(ssn_pattern, text)

print(ssns)

В этом примере мы определяем регекс-шаблон r”\d{3}-\d{2}-\d{4}” для поиска номеров социального страхования в формате “XXX-XX-XXXX”. Шаблон фиксирует три цифры (\d{3}), затем дефис, две цифры (\d{2}), еще один дефис и четыре цифры (\d{4}). Используя re.findall(), мы извлекаем все SSN из данного текста.

Эти примеры демонстрируют мощь и гибкость regex в Python для решения сложных задач обработки текста. Освоив regex и используя его возможности, вы сможете эффективно работать со сложными текстовыми шаблонами и извлекать ценную информацию из различных источников.

Заключение

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

+1
0
+1
2
+1
0
+1
0
+1
0

Ответить

Ваш адрес email не будет опубликован. Обязательные поля помечены *