RegExp презентация

Содержание

Регуля́рные выраже́ния (англ. regular expressions, сокр. RegExp, RegEx, жарг. регэ́кспы или ре́гексы) — это формальный язык поиска и осуществления манипуляций с подстроками в тексте, основанный на использовании метасимволов (символов-джокеров, англ. wildcard characters). По сути это строка-образец (англ. pattern, по-русски её

Слайд 1RegExp


Слайд 2Регуля́рные выраже́ния (англ. regular expressions, сокр. RegExp, RegEx, жарг. регэ́кспы или ре́гексы) — это формальный язык поиска и осуществления

манипуляций с подстроками в тексте, основанный на использовании метасимволов (символов-джокеров, англ. wildcard characters). По сути это строка-образец (англ. pattern, по-русски её часто называют «шаблоном», «маской»), состоящая из символов и метасимволов и задающая правило поиска.


Функции для работы со строками с помощью регулярных выражений находятся в модуле по имени re (regular expressions)

Слайд 3Для чего нужны регулярные выражения?
Регулярные выражения применяют для: 

а) поиска подстроки, удовлетворяющей

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


Слайд 4 Создать откомпилированный шаблон регулярного выражения позволяет функция compile(). Функция имеет следующий

формат:
<Шаблон> = re.compile(<Регулярное выражение>[, <Модификатор>])

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

Если модификатор не указать, то все слеши необходимо будет экранировать.

p = re.compile(r”^\w+$”)
p = re.compile(“^\\w+$”)

Слайд 5Специальные обозначения


Слайд 6Помимо специальных обозначений, в регулярном выражении только буквы и цифры могут

входить в качестве самих себя. Для внесения других символов необходимо использовать обратную косую черту. Например, скобку можно задать как «\ (»

С регулярным выражением можно не только сопоставлять строки (подходит – не подходит), но и искать строки, удовлетворяющие регулярному выражению, в тексте.
____________
В таблице ниже приведены регулярные выражения и примеры сопоставимых с ними и не сопоставимых с ними строк


Слайд 9«Жадные» выражения
Все квантификаторы являются «жадными». При поиске соответствия ищется самая длинная

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







Чтобы ограничить «жадность», необходимо после квантификатора указать символ ?

>>> s = "Text1Text2Text3"
>>> p = re.compile(r".*", re.S)
>>> p.findall(s)

[‘Text1Text2Text3’]

>>> s = "Text1Text2Text3"
>>> p = re.compile(r".*?", re.S)
>>> p.findall(s)

[‘Text1’ , ‘Text3’]


Слайд 10*? - «не жадный» («ленивый») эквивалент *
+? - «не жадный» («ленивый») эквивалент +
{n,}? - «не жадный»

(«ленивый») эквивалент {n,}

>>>s = "Text1Text2Text3"
>>> p = re.compile(r"(.*?)", re.S)
>>> p.findall(s)

[‘Text1’ , ‘Text3’]

Если необходимо получить содержимое без тегов, то нужный фрагмент внутри шаблона следует разместить внутри круглых скобок


Слайд 11Группы
( ) Простая группа с захватом.

(?: ) Группа без захвата.
То же самое,

но заключённое в скобках выражение не добавляется к списку захваченных фрагментов. Например, если требуется найти или «здравствуйте», или «здрасте», но не важно, какое именно приветствие найдено, можно воспользоваться выражением здра(?:сте|вствуйте).

(?= ) Группа с проверкой впереди (zero-width positive lookahead assertion). Продолжает поиск только если справа от текущей позиции в тексте находится заключённое в скобки выражение. При этом само выражение не захватывается. Например, говор(?=ить) найдёт «говор» в «говорить», но не «говорит».

Слайд 12К найденному фрагменту в круглых скобках внутри шаблона можно обратиться с

помощью механизма обратных ссылок.
\1 – порядковый номер круглых скобок

>>> s = "Text1Text2Text3"
>>> p = re.compile(r"<([a-z]+)>(.*?)", re.S | re.I)
>>> p.findall(s)

[(‘b’, ‘Text1’) , (‘I’, ‘Text3’)]


Слайд 13Функции
Для поиска первого совпадения с шаблоном предназначены следующие функции:
match() – проверяет

соответствие с началом сторки
re.match(<Шаблон>, <Строка>[, <Модификатор>])

>>> p = r”[0-9]+”
>>> print “Найдено” if re.match(p, “str123”) else “Нет”
Нет
>>> print “Найдено” if re.match(p, “123str”) else “Нет”
Найдено
>>> p = re.compile(r”[0-9]+”)
>>> print “Найдено” if re.match(p, “123str”) else “Нет”
Найдено


Слайд 14 search() – проверяет соответствие с любой частью строки
re.search(, [, ])
>>>

p = r”[0-9]+”
>>> print “Найдено” if re.search(p, “str123”) else “Нет”
Найдено
>>> p = re.compile(r”[0-9]+”)
>>> print “Найдено” if re.search(p, “str123”) else “Нет”
Найдено

Слайд 15Проверка e-mail на соответствие шаблону

# -*- coding: cp1251 -*-
import re
email =

raw_input(“Введите e-mail: “)
pe = r"^([a-z0-9_.-]+)@(([a-z0-9-]+\.)+[a-z]{2,6})$"
p = re.compile(pe, re.I)
m = p.search(email)
if not m:
print “E-mail не соответствует шаблону”
else:
print “E-mail”, m.group(0), “соответствует шаблону”
print “ящик:”, m.group(1), “домен:”, m.group(2)

Результат выполнения:
Введите e-mail: unicross@mail.ru
E-mail unicross@mail.ru соответствует шаблону
ящик: unicross домен: mail.ru

Слайд 16 Для поиска всех совпадений с шаблоном предназначены следующие функции:

findall() – ищет

все совпадения с шаблоном

re.findall(<Шаблон>, <Строка>[, <Модификатор>])

>>> p = r”[0-9]+”
>>> re.findall(p, “1 2 3 4 5 6”)
[‘1’, ‘2’, ‘3’, ‘4’, ‘5’, ‘6’]

>>> p = re.compile(r”[0-9]+”)
>>> re.findall(p, “1 2 3 4 5 6”)
[‘1’, ‘2’, ‘3’, ‘4’, ‘5’, ‘6’]


Слайд 17finditer() – аналогично функции findall(), но возвращает итератор, а не список.


re.finditer(<Шаблон>, <Строка>[, <Модификатор>])

Получим содержимое между тегами:

>>> p = re.compile(r”(.+?)”, re.I | re.S)
>>> s = “Text1Text2Text3
>>> for m in re.finditer(p, s):
print m.group(1)

Text1
Text3


Слайд 18 Для замены в строке с помощью регулярных выражений предназначены следующие функции

и методы:

sub() – ищет все совпадения с шаблоном и заменяет их указанным значением. Если совпадения не найдены, возвращается исходная строка.

subn() – аналогичен sub(), но возвращает не строку, а кортеж из двух элементов – измененной строки и количества произведенных замен.
re.subn(<Шаблон>, <Новый фрагмент или ссылка на функцию>, <Строка для замены>[, <Максимальное количество замен>])

>>> p = r”200[79]”
>>> re.subn(p, “2001”, “2007, 2008, 2009, 2010”)
(‘2001, 2008, 2001, 2010’, 2)


Обратная связь

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

Email: Нажмите что бы посмотреть 

Что такое ThePresentation.ru?

Это сайт презентаций, докладов, проектов, шаблонов в формате PowerPoint. Мы помогаем школьникам, студентам, учителям, преподавателям хранить и обмениваться учебными материалами с другими пользователями.


Для правообладателей

Яндекс.Метрика