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

Презентация:



Advertisements
Похожие презентации
JavaScript Регулярные выражения Введение Создание регулярных выражений Флаги (способы поиска по шаблону) Метасимволы Специальные символы Квантификаторы.
Advertisements

Регулярные выражения Денис С. Мигинский. Происхождение регулярных выражений Регулярные выражения – язык предназначенный для синтаксического разбора текстовых.
Понятие строки. Операции со строковыми величинами. Стандартные процедуры и функции обработки строковых величин. Простые алгоритмы работы со строками на.
Строки в Pascal
Строки, Списки, Кортежи.. Строки (string) Строка-это последовательность букв Для обозначения строки используются одинарные или двойные кавычки. Для длинных.
Запросы в базе данных. Понятия запроса При работе с таблицами можно в любой момент выбрать из базы данных необходимую информацию с помощью запросов. Запрос.
Алгоритмический язык и язык Бейсик Ученицы 11-А класса ОШ 15 Бондаренко Натальи.
Регулярные выражения. Регулярные выражения это один из способов поиска подстрок (соответствий) в строках. Используются для: проверки наличия соответствующей.
Обработка символьных величин. Цели урока Познакомиться с основными принципами работы с символьными величинами Познакомиться с основными принципами работы.
Массивы 9 класс. Основные теоретические сведения Примеры решения задач.
Строки. Функции для работы со строками. Величины значением которых является последовательность символов называются текстовыми величинами или строками.
Скриптовые языки на примере Perl. Языки программирования Скриптовые Программа (или ее бай-код) интерпретируется Зачастую более высокий уровень абстрагирования.
Основы алгоритмизации и программирования Чабанюк Виктория 10 класс.
Технология обработки информации в электронных таблицах Мисюрев Алексей Владимирович учитель информатики МОУ СОШ 28 имени А. Смыслова.
UNIX: регулярные выражения, POSIX/PCRE, GREP, SED.
Работа со строковыми типами данных. Строка – упорядоченная последовательность символов. Строковая константа – последовательность символов, заключенных.
РАБОТА В ТАБЛИЧНОМ ПРОЦЕССОРЕ EXCEL РАЗРАБОТАЛ: НЕЛИПА А.А.
1 Стили текста. Шаблоны и мастера Занятие 6. 2 Изучив эту тему вы научитесь: Выводить на экран колонку стилей. Применять стили к тексту. Создавать новые.
База данных – это совокупность структурированных данных определенного назначения. Структурирование данных – это объединение данных по определенным параметрам.
Лекция 9 Регулярные выражения Операторы и приоритеты.
Транксрипт:

RegExp

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

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

Создать откомпилированный шаблон регулярного выражения позволяет функция compile(). Функция имеет следующий формат: = re.compile( [, ]) Перед строками, содержащими регулярные выражения, указан модификатор r. Иными словами, мы используем неформатированные строки. Если модификатор не указать, то все слеши необходимо будет экранировать. p = re.compile(r^\w+$) p = re.compile(^\\w+$)

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

Помимо специальных обозначений, в регулярном выражении только буквы и цифры могут входить в качестве самих себя. Для внесения других символов необходимо использовать обратную косую черту. Например, скобку можно задать как «\ (» С регулярным выражением можно не только сопоставлять строки (подходит – не подходит), но и искать строки, удовлетворяющие регулярному выражению, в тексте. ____________ В таблице ниже приведены регулярные выражения и примеры сопоставимых с ними и не сопоставимых с ними строк

«Жадные» выражения Все квантификаторы являются «жадными». При поиске соответствия ищется самая длинная подстрока, соответствующая шаблону, и не учитываются более короткие соответствия. Рассмотрим это на примере. Получим содержимое всех тегов вместе с тегами: Чтобы ограничить «жадность», необходимо после квантификатора указать символ ? >>> s = " Text1 Text2 Text3 " >>> p = re.compile(r".* ", re.S) >>> p.findall(s) [ Text1 Text2 Text3 ] >>> s = " Text1 Text2 Text3 " >>> p = re.compile(r".*? ", re.S) >>> p.findall(s) [ Text1, Text3 ]

*? - «не жадный» («ленивый») эквивалент * +? - «не жадный» («ленивый») эквивалент + {n,}? - «не жадный» («ленивый») эквивалент {n,} >>>s = " Text1 Text2 Text3 " >>> p = re.compile(r" (.*?) ", re.S) >>> p.findall(s) [Text1, Text3] Если необходимо получить содержимое без тегов, то нужный фрагмент внутри шаблона следует разместить внутри круглых скобок

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

К найденному фрагменту в круглых скобках внутри шаблона можно обратиться с помощью механизма обратных ссылок. \1 – порядковый номер круглых скобок >>> s = " Text1 Text2 Text3 " >>> p = re.compile(r" (.*?) ", re.S | re.I) >>> p.findall(s) [(b, Text1), (I, Text3)]

Функции Для поиска первого совпадения с шаблоном предназначены следующие функции: 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 Нет Найдено

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 Нет Найдено

Проверка на соответствие шаблону # -*- coding: cp1251 -*- import re = raw_input(Введите ) pe = p = re.compile(pe, re.I) m = p.search( ) if not m: print не соответствует шаблону else: print , m.group(0), соответствует шаблону print ящик:, m.group(1), домен:, m.group(2) Результат выполнения: Введите соответствует шаблону ящик: unicross домен: mail.ru

Для поиска всех совпадений с шаблоном предназначены следующие функции: findall() – ищет все совпадения с шаблоном re.findall(, [, ]) >>> p = r[0-9]+ >>> re.findall(p, ) [1, 2, 3, 4, 5, 6] >>> p = re.compile(r[0-9]+) >>> re.findall(p, ) [1, 2, 3, 4, 5, 6]

finditer() – аналогично функции findall(), но возвращает итератор, а не список. re.finditer(, [, ]) Получим содержимое между тегами: >>> p = re.compile(r (.+?), re.I | re.S) >>> s = Text1 Text2 Text3 >>> for m in re.finditer(p, s): print m.group(1) Text1 Text3

Для замены в строке с помощью регулярных выражений предназначены следующие функции и методы: sub() – ищет все совпадения с шаблоном и заменяет их указанным значением. Если совпадения не найдены, возвращается исходная строка. subn() – аналогичен sub(), но возвращает не строку, а кортеж из двух элементов – измененной строки и количества произведенных замен. re.subn(,, [, ]) >>> p = r200[79] >>> re.subn(p, 2001, 2007, 2008, 2009, 2010) (2001, 2008, 2001, 2010, 2)