СДЕЛАЙТЕ СВОИ УРОКИ ЕЩЁ ЭФФЕКТИВНЕЕ, А ЖИЗНЬ СВОБОДНЕЕ

Благодаря готовым учебным материалам для работы в классе и дистанционно

Скидки до 50 % на комплекты
только до

Готовые ключевые этапы урока всегда будут у вас под рукой

Организационный момент

Проверка знаний

Объяснение материала

Закрепление изученного

Итоги урока

Уроки Python 15 - Регулярные выражения

Категория: Информатика

Нажмите, чтобы узнать подробности

Уроки Python 15 - Регулярные выражения

Просмотр содержимого документа
«Уроки Python 15 - Регулярные выражения»

Уроки Python 15 - Регулярные выражения

Регулярные выражения - это специальные шаблоны для поиска и замены строк в тексте. Внутри этих шаблонов используются сокращенные обозначения групп символов. Прежде чем перейти к изучению регулярных выражений следует перечислить эти самые символы. Что они означают и зачем применяются вы поймете позже, дочитав статью до конца, а пока просто перечислим их. Данные символы используются для составления регулярных выражений, но прежде чем мы начнем использовать их, давайте познакомимся с командами модуля re. Этот модуль можно импортировать в начале программы с помощью import re.

re.search(pattern,string)

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



В качестве примера давайте попробуем найти слово "информатика" в тексте.

import re

pattern=r"информатика"

string="В современном мире информатика и информационные системы будут играть решающую роль. Поэтому, информатика - важная наука."

result=re.search(pattern, string)

print(result.group(0))

Программа напечатает:

информатика

Команда search ищет только первое вхождение шаблона. Поэтому в нашем случае вернется всего один результат - слово "информатика", несмотря на то, что в нашем тексте данное слово присутствует два раза. Чтобы вернуть все вхождения шаблона в текст, используется следующая команда:

re.findall(pattern, string)



Данная команда вернет список строк, которые присутствуют в тексте и совпадают с шаблоном.

import re

pattern=r"информатика"

string="В современном мире информатика и информационные системы будут играть решающую роль. Поэтому, информатика - важная наука."

result=re.findall(pattern, string)

print(result)

Программа напечатает список:

['информатика', 'информатика']

В предыдущих двух примерах программ в качестве шаблона pattern для поиска строк мы использовали просто какое-то слово. Но мощь регулярных выражений не в этом. Помните табличку, которая была вверху статьи? Мы можем заменять части шаблона специальными символами. Давайте, например, попробуем найти в данном тексте все слова, которые начинаются с "инф". Для этого используем символ \b для того, чтобы указать начало слова. Далее укажем с чего должно начинаться слово, и напишем символ w+, который означает, что дальше в шаблоне должны идти какие-то буквы до тех пор, пока не встретится символ не-буква. Шаблон будет выглядеть так:

r"\bинф\w+"

Обратите внимание, что шаблоны в регулярных выражениях имеют буковку r перед началом строки.

import re

pattern=r"\bинф\w+"

string="В современном мире информатика и информационные системы будут играть решающую роль. Поэтому, информатика - важная наука."

result=re.findall(pattern, string)

print(result)



Программа напечатает список всех слов, начинающихся с "инф":

['информатика', 'информационные', 'информатика']

С помощью знаков из таблички мы сделали шаблон, который позволил нам найти слова, которые ему соответствуют. Давайте попробуем задачу посложнее. Найдем в тексте все e-mail с доменом mail.ru, если они там есть.

import re

pattern=r"\b\[email protected]"

string="Если вы хотите связаться с админом, пишите на почту [email protected]. По другим вопросам обращайтесь на [email protected]."

result=re.findall(pattern, string)

print(result)



Программа напечатает все слова, которые заканчиваются на @mail.ru

['[email protected]', '[email protected]']

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

Часто нам нужно найти какой-то элемент строки, окруженный двумя другими элементами. Например, это может быть url адреса ссылок html кода. Для того, чтобы выделить ту часть шаблона, которую нужно вернуть, используются скобки. Приведем пример, в котором получим все url адреса ссылок из какого-то кусочка html кода.

import re

string='Вы можете посмотреть карту сайта тут. Посетите также раздел'

pattern=r'href="(.+?)"'

result=re.findall(pattern,string)

print(result)



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

['map.php', 'best.php']

Следует немного пояснить, что мы сделали. Мы составили шаблон того, что мы ищем pattern=r'href="(.+?)"' - в этом шаблоне искомая строка начинается с href=" и заканчивается еще одной двойной кавычкой. Скобки нужны для того, чтобы указать какую часть искомого шаблона мы хотим получить в переменную result. Точка внутри скобок указывает, что часть шаблона в скобках может быть любыми символами, кроме символа новой строки. Плюсик и вопросительный знак применяется, чтобы указать что мы ищем ноль или более подходящих под шаблон строк.



Кроме поиска мы можем также осуществлять замену строк соответствующих шаблонов на какие-то другие строки. Например, давайте попробуем удалить из html кода все теги. Для этого используется команда:

re.sub(pattern,'на что заменять шаблон',string)



Составим программу:

import re

string='Вы можете посмотреть карту сайта тут. Посетите также раздел'

pattern=r''

result=re.sub(pattern,'',string)

print(result)



Программа напечатает нашу строку уже без наличия в ней тегов.

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

https://regex101.com/