Уроки Python 15 - Регулярные выражения
компьютерная программа по информатике и икт

Кликодуев Владимир Валерьевич

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

 

Скачать:

ВложениеРазмер
Файл uroki_python_15.docx67.14 КБ

Предварительный просмотр:

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

Регулярные выражения - это специальные шаблоны для поиска и замены строк в тексте. Внутри этих шаблонов используются сокращенные обозначения групп символов. Прежде чем перейти к изучению регулярных выражений следует перечислить эти самые символы. Что они означают и зачем применяются вы поймете позже, дочитав статью до конца, а пока просто перечислим их. http://python.divz.ru/pic/20171031080116870.jpgДанные символы используются для составления регулярных выражений, но прежде чем мы начнем использовать их, давайте познакомимся с командами модуля 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\w+@mail.ru"

string="Если вы хотите связаться с админом, пишите на почту wbsr@mail.ru. По другим вопросам обращайтесь на iwqn@mail.ru."

result=re.findall(pattern, string)

print(result)

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

['wbsr@mail.ru', 'iwqn@mail.ru'] 

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

Часто нам нужно найти какой-то элемент строки, окруженный двумя другими элементами. Например, это может быть 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/


По теме: методические разработки, презентации и конспекты

Дистанционный урок "Создание регулярной армии. Этапы развития армии до 1917г"

Систематизация знаний учащихся о содержании военных реформ и об основных реформаторах российской армии.Воспитание у учащихся чувства патриотизма и уважение к Вооруженным силам России.Формирование...

Уроки Python 1 - Переменные и их типы

Уроки Python 1 - Переменные и их типы...

Уроки Python 2 - Условный оператор if-else

Уроки Python 2 - Условный оператор if-else...

Уроки Python 3 - Сложные условия

Уроки Python 3 - Сложные условия...

Уроки Python 4 - Списки и циклы

Уроки Python 4 - Списки и циклы...

Уроки Python 5 - "Первая программа"

Уроки Python 5 - Первая программа...

Уроки Python 6 - Работа со строками

Уроки Python 6 - Работа со строками...