Search Header Logo
Регулярное выражение

Регулярное выражение

Assessment

Presentation

Engineering

11th Grade

Easy

Created by

Екатерина Иванова

Used 4+ times

FREE Resource

16 Slides • 3 Questions

1

Регулярное выражение

2

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

Регулярное выражение, или коротко «регулярка», состоит из обычных символов и специальных командных последовательностей. Например, \d задаёт любую цифру, а \d+ — задает любую последовательность из одной или более цифр.

3

media

4

Регулярные выражения, или коротко, регулярки — это очень мощный инструмент. Но использовать их следует с умом и осторожностью, и только там, где они действительно приносят пользу, а не вред.
Во-первых, плохо написанные регулярные выражения работают медленно.
Во-вторых, их зачастую очень сложно читать, особенно если регулярка написана не лично тобой пять минут назад.
В-третьих, очень часто даже небольшое изменение задачи (того, что требуется найти) приводит к значительному изменению выражения. Поэтому про регулярки часто говорят, что это write only code (код, который только пишут с нуля, но не читают и не правят).

5

media

6

media

7

media

8

Самое простое регулярное выражение – это точно заданная строка для поиска. Например, так можно найти слово в предложении:
s = "Карл у Клары украл кораллы."

9

Метод span для этого объекта показывает позиции найденного слова:

s = "Карл у Клары украл кораллы."

if m := re.search( "коралл", s ):

   print( "Есть коралл!" )

   print( m.span() )      

else:

   print( "Нет коралла." )

10

При поиске можно использовать шаблоны. Точка в строке поиска обозначает любой символ:

m = re.search( "к.ра", s )

По такому шаблону будет найдено «кора», «кура», «кара» и т. д.

s = "Кура кара кора икра кобура"

11

Метод group возвращает само найденное слово. При поиске учитывается регистр символов, поэтому первое слово «Кура» не совпало с образцом. Если передать функции search третий аргумент re.I (от англ. ignore caseне учитывать регистр)

m = re.search( "к.ра", s, re.I )

то мы найдём первое слово «Кура».

12

Метод group возвращает само найденное слово. При поиске учитывается регистр символов, поэтому первое слово «Кура» не совпало с образцом. Если передать функции search третий аргумент re.I (от англ. ignore caseне учитывать регистр)

m = re.search( "к.ра", s, re.I )

то мы найдём первое слово «Кура».

13

Функция findall возвращает массив все слов, соответствующих шаблону, но не даёт информации об их позициях в строке:

s = "Кура кара кора икра кобура"

m = re.findall( "к.ра", s )

print( m )

14

Open Ended

В тексте встречаются коды кабинетов, которые имею такой формат: «буква+"–"+три цифры». Буква в номере – это A, Б или У. Нужно вывести на экран все найденные коды кабинетов и их количество.

s = "А-213 Б-4 Б-219 Ф-215 У-514"

15


Код кабинета начинается с буквы А, Б или У. В шаблоне такой выбор обозначается как «[АБУ]». Затем идет дефис (минус), а потом – три цифры. Цифру в регулярном выражении обозначают как «\d», а количество задают в фигурных скобках. Таким образом, получается шаблон «[АБУ]-\d{3}». Вот пример программы:

s = "А-213 Б-4 Б-219 Ф-215 У-514"

m = re.findall( r"[АБУ]-\d{3}", s )

print( m )
Обратите внимание, что перед строкой шаблона стоит буква r (англ. rawсырой, необработанный). Она отменяет специальное значение символа \, который используется в сочетаниях типа «\n» (новая строка).

16

Open Ended

В строке url записан URL-адрес веб-страницы. Требуется определить адрес сайт (IP-адрес или доменное имя).

url = "https://www.example.com/old/html/qq.html"

17


Чтобы выделить имя сайта как отдельную строку, в шаблоне заключим его в круглые скобки. Такой приём позволяет образовать группу, и все найденные группы можно вывести с помощью метода groups:

m = re.search( r"https?://([^/]+)/", url )

print( m.groups() )# ('www.example.com',)

18

Open Ended

В некоторых странах используют формат записи даты «mm/dd/yyyy», где mm – номер месяца, dd – номер дня и yyyy – год. Требуется найти все такие последовательности и заменить формат вывода даты на российский: «dd.mm.yyyy».

Решение, использующее функцию sub (от англ. substitutionподставновка):

s = "Даты: 12/11/2022 и 01/03/2023."

19

sNew = re.sub( r"(\d{2})/(\d{2})/(\d{4})",

               r"\2.\1.\3",  s )

print( sNew )

Регулярное выражение

Show answer

Auto Play

Slide 1 / 19

SLIDE