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

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

Регулярные выражения состоят из двух типов символов: литералов и метасимволов. Литералы — это символы, совпадающие друг с другом, такие как "a" или "5". Метасимволы — это специальные символы, которые имеют особое значение в регулярных выражениях, например “.” или “*”.

Регулярные выражения часто используются для сопоставления шаблонов в тексте, таких как номера телефонов, адреса электронной почты или URL-адреса. Например, регулярное выражение, соответствующее номеру телефона, может выглядеть так: "\d{3}-\d{3}-\d{4}", где '\d' представляет любую цифру, а фигурные скобки указывают количество совпадений.

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

2. Использование регулярных выражений в Python

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

Чтобы использовать модуль «re», сначала необходимо импортировать его в программу Python:

import re

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

  • re.search(): ищет шаблон в строке и возвращает первое совпадение.
  • re.match(): Соответствует шаблону в начале строки и возвращает совпадение.
  • re.findall(): возвращает все непересекающиеся совпадения шаблона в строке.
  • re.sub(): заменяет все вхождения шаблона в строку строкой замены.
  • re.split(): разбивает строку на список подстрок, используя шаблон в качестве разделителя.

Рассмотрим каждую из этих функций более подробно.

2.1. исследовать()

Функция re.search() ищет шаблон в строке и возвращает первое совпадение. Если шаблон не найден, возвращается None.

Вот пример:

import re

text = "The quick brown fox jumps over the lazy dog."
pattern = "brown"
match = re.search(pattern, text)
if match:
    print("Pattern found:", match.group())
else:
    print("Pattern not found.")
# Output:
# Pattern found: brown

В этом примере мы ищем шаблон "brown" в текстовой строке. Функция re.search() возвращает объект соответствия, если шаблон найден. Мы проверяем, не является ли объект совпадения None, и если это не так, мы печатаем совпадающую строку, используя метод group() объекта соответствия.

2.2. повторный матч()

Функция re.match() похожа на re.search(), но соответствует только шаблону в начале строки. Если шаблон не найден в начале строки, возвращается None.

Вот пример:

import re

text = "The quick brown fox jumps over the lazy dog."
pattern = "The"
match = re.match(pattern, text)
if match:
    print("Pattern found:", match.group())
else:
    print("Pattern not found.")
# Output:
# Pattern found: The

В этом примере мы ищем шаблон "The" в начале текстовой строки. Функция re.match() возвращает объект соответствия, если шаблон находится в начале строки. Мы проверяем, не является ли объект совпадения None, и если это не так, мы печатаем совпадающую строку, используя метод group() объекта соответствия.

2.3. re.findall()

Функция re.findall() возвращает все непересекающиеся совпадения шаблона в строке. Он возвращает совпадения в виде списка строк.

Вот пример:

import re

text = "The quick brown fox jumps over the lazy dog."
pattern = "\w+"
matches = re.findall(pattern, text)
print(matches)
# Output:
# ['The', 'quick', 'brown', 'fox', 'jumps', 'over', 'the', 'lazy', 'dog']

В этом примере мы используем шаблон "\w+" для соответствия любым символам слова (буквам, цифрам и знакам подчеркивания). Функция re.findall() возвращает все неперекрывающиеся совпадения шаблона в текстовой строке в виде списка строк.

2.4. re.sub()

Функция re.sub() заменяет все вхождения шаблона в строку строкой замены. Он возвращает измененную строку.

Вот пример:

import re

text = "The quick brown fox jumps over the lazy dog."
pattern = "brown"
replacement = "red"
new_text = re.sub(pattern, replacement, text)
print(new_text)
# Output:
# The quick red fox jumps over the lazy dog.

В этом примере мы заменяем все вхождения шаблона "brown" строкой замены "red" в текстовой строке. Функция re.sub() возвращает измененную строку.

2.5. re.split()

Функция re.split() разбивает строку на список подстрок, используя шаблон в качестве разделителя. Возвращает список подстрок.

Вот пример:

import re

text = "The quick brown fox jumps over the lazy dog."
pattern = "\s+"
words = re.split(pattern, text)
print(words)
# Output:
# ['The', 'quick', 'brown', 'fox', 'jumps', 'over', 'the', 'lazy', 'dog.']

В этом примере мы разбиваем текстовую строку на список слов, используя шаблон "\s+" для соответствия любым пробельным символам. Функция re.split() возвращает список слов.

3. Общие шаблоны регулярных выражений

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

3.1. Совпадающие цифры

Чтобы соответствовать любой цифре, вы можете использовать метасимвол "\d". Чтобы сопоставить определенное количество цифр, вы можете использовать фигурные скобки, чтобы указать количество совпадений. Например, "\d{3}" соответствует трем цифрам.

Например:

import re

text = "I am 23 years old"
pattern = "\d"
matches = re.findall(pattern, text)
print(matches)
# Output:
# ['2', '3']

В приведенном выше примере мы отделили все цифры от текста с помощью шаблона "\d".

3.2. Соответствующие буквы

Чтобы соответствовать любой букве, вы можете использовать метасимвол "\w". Чтобы соответствовать только строчным буквам, вы можете использовать шаблон "\w+". Чтобы соответствовать только заглавным буквам, вы можете использовать шаблон "[A-Z]+".

Например:

import re

text = "The quick BROWN fox jumps over the lazy dog."
pattern = "[A-Z]+"
matches = re.findall(pattern, text)
print(matches)
# Output:
# ['T', 'BROWN']

В этом примере шаблон "[A-Z]"+ соответствует всем заглавным буквам.

3.3. Соответствующие слова

Чтобы соответствовать любому слову, вы можете использовать шаблон "\w+". Чтобы сопоставлять только слова, начинающиеся с определенной буквы, вы можете использовать "[letter]\w+".

Например:

import re

text = "The quick brown fox jumps over the lazy dog."
pattern = "[br]\w+"
matches = re.findall(pattern, text)
print(matches)
# Output:
# ['brown']

В этом примере мы использовали шаблон "[br]\w+" для сопоставления всех слов, начинающихся с букв 'br'.

3.4. Соответствующие URL-адреса

Для сопоставления URL-адресов вы можете использовать следующий шаблон:

(?:http|https)://[\w\-\d]+(?:\.[\w\-\d]+)*(?::\d+)?(?:[/\?#][^\s]*)?

Этот шаблон соответствует любому URL-адресу, начинающемуся с "http://" или "https://", за которым следует один или несколько символов слова или дефис, за которыми следует ноль или несколько групп точек, за которыми следует один или несколько словесных символов или дефисов, за которыми следует необязательный номер порта, за которым следует ноль или более групп косой черты, вопросительного знака или символа решетки, за которыми следует любой непробельный символ.

4. Вывод

Регулярные выражения — это мощный инструмент для сопоставления с образцом и работы с текстом в Python. Они обеспечивают гибкий и эффективный способ поиска, замены и извлечения данных из текстовых строк. В этом блоге мы рассмотрели основы регулярных выражений в Python, включая различные функции и методы в модуле «re», а также некоторые распространенные шаблоны.