Python RegEx
Регулярные выражения (regex) — мощный инструмент для обработки текста в Python. Они позволяют эффективно искать, заменять и извлекать шаблоны из текста. В этом руководстве рассматривается базовый синтаксис регулярных выражений и наиболее часто используемые функции модуля re в Python.
Базовый синтаксис
Регулярные выражения сочетают метасимволы и обычные (буквальные) символы. Метасимволы имеют специальное значение. Например, точка (.) соответствует любому символу, кроме перевода строки, а звездочка (*) соответствует нулю или более вхождениям предыдущего символа. Обычные символы соответствуют сами себе. Например, шаблон hello соответствует строке "hello".
Примечание о сырых строках: Шаблоны регулярных выражений обычно записываются как сырые строки (с префиксом r, например, r'\d+'). Это указывает Python не интерпретировать обратные слеши как символы экранирования, что необходимо для синтаксиса регулярных выражений, такого как \d, \w или \s.
Квантификаторы
Квантификаторы указывают, сколько раз шаблон должен совпасть. Наиболее часто используемые квантификаторы:
*соответствует нулю или более вхождениям предыдущего символа или группы.+соответствует одному или более вхождениям предыдущего символа или группы.?соответствует нулю или одному вхождению предыдущего символа или группы.{}указывает точное количество или диапазон вхождений предыдущего символа или группы.
import re
print(re.findall(r'a*', 'baaa')) # ['', 'aaa', '']
print(re.findall(r'a+', 'baaa')) # ['aaaa']
print(re.findall(r'a?', 'baaa')) # ['', 'a', 'a', 'a', '']
print(re.findall(r'a{3}', 'baaa')) # ['aaa']Классы символов
Классы символов соответствуют любому одному символу из указанного набора. Например, [aeiou] соответствует любой гласной букве, а [0-9] — любой цифре.
import re
print(re.findall(r'[aeiou]', 'hello')) # ['e', 'o']
print(re.findall(r'[0-9]', 'a1b2c3')) # ['1', '2', '3']Якоря
Якоря указывают позицию шаблона в тексте. Наиболее часто используемые якоря:
^соответствует началу строки.$соответствует концу строки.
import re
print(re.findall(r'^Python', 'Python is great')) # ['Python']
print(re.findall(r'great$', 'Python is great')) # ['great']Группы
Группы захватывают подшаблоны для последующего извлечения. Их можно использовать для выделения конкретных частей строки. Например, шаблон (\d+)-(\d+)-(\d+) соответствует дате в формате YYYY-MM-DD и захватывает год, месяц и день.
import re
match = re.search(r'(\d{4})-(\d{2})-(\d{2})', '2023-10-05')
if match:
print(match.groups()) # ('2023', '10', '05')Модуль re
Модуль re предоставляет функции для работы с регулярными выражениями в Python. Наиболее часто используемые функции:
re.search()ищет шаблон и возвращает первый объект совпадения.re.findall()ищет все вхождения и возвращает список совпадений.re.sub()заменяет все вхождения шаблона на указанную строку.re.split()разделяет строку по вхождениям шаблона.
Вы также можете изменять поведение поиска с помощью флагов. Например, re.IGNORECASE делает поиск без учета регистра.
import re
text = 'apple banana apple'
print(re.search(r'banana', text)) # <re.Match object; span=(6, 12), match='banana'>
print(re.findall(r'apple', text)) # ['apple', 'apple']
print(re.sub(r'apple', 'orange', text)) # 'orange banana orange'
print(re.split(r'\s+', 'one two three')) # ['one', 'two', 'three']
print(re.findall(r'python', 'Python is great', re.IGNORECASE)) # ['Python']Заключение
Регулярные выражения — мощный инструмент для обработки текста в Python. В сочетании с модулем re они позволяют эффективно решать сложные задачи манипуляции с текстом. В этом руководстве рассмотрены базовый синтаксис и основные функции, необходимые для начала работы.
Практика
Какова функция модуля 're' в Python?