Функции, методы и константы регулярных выражений



ЛАБОРАТОРНАЯ РАБОТА № 8

Тема: Регулярные выражения

Цель: Изучение средств языка Python для работы с регулярными выражениями

ОГЛАВЛЕНИЕ

Введение
1 Синтаксис регулярных выражений
1.1 Представление символов
1.2 Позиция внутри строки
1.3 Квалификаторы повторения
2 Функции, методы и константы регулярных выражений
2.1 Модуль re
2.1.1 Константы модуля re
2.1.2 Функции модуля re
2.2 Методы объектов класса RegexpObject
2.3 Методы объектов класса MatchObject
2.4 Использование скобок в регулярных выражениях
3 Использование регулярных выражений
Пример №1
Индивидуальные задания

Оглавление

Введение

Регулярные выражения (англ. regular expressions, сокр. RegExp) – это формальный язык поиска подстрок в тексте и осуществления манипуляций с ними, основанный на использовании метасимволов (англ. wildcard characters). По сути это шаблон (англ. pattern), строка-образец, состоящая из символов и метасимволов и задающая правило поиска.
Регулярные выражения (РВ) изобрел американский математик, один из основателей направления "Компьютерные науки" Стефан Клини (Stephen Kleene), который описал поведение модели нейрона, предложенной в 1940-х гг. Уорреном Маккалоком и Уолтером Питтсом, используя свою систему математических обозначений, названную им "регулярные множества".
Регулярные выражения произвели прорыв в электронной обработке текстов в конце XX века. Многие современные языки программирования имеют встроенную поддержку регулярных выражений. Среди них Perl, Java, PHP, Python, JavaScript и многие др.
Вместе с тем, необходимо заметить, что не все возможные задачи обработки текста могут быть решены с помощью РВ, поскольку язык регулярных выражений относительно прост и ограничен. Кроме того, в отдельных случаях, когда РВ имеют сложную форму, бывает проще решить задачу, применив код на языке Python, который может работать быстрее и иметь более простой вид.

Оглавление

Синтаксис регулярных выражений

Представление символов

Большинство символов в регулярном выражении являются простыми символами, т.е. такими, которые представляют сами себя, за исключением символов [ ] \ ^ $ . | ? * + ( ) { }, которые являются метасимволами. К метасимволам также относятся некоторые простые символы с предшествующим символом \ (обратный слеш). Метасимволы в РВ имеют следующиее назначение:

· [ ] – набор символов в квадратных скобках именуется символьным классом и позволяет указать интерпретатору регулярных выражений, что на данном месте в строке может стоять один из перечисленных символов. В частности, [abc] задает возможность появления в тексте одной из букв: "a", "b" или "c".
Если символы идут подряд, можно указать диапазон: например, [abc] эквивалентно [a-c], а символьный класс [А-Яа-я] соответствует всем буквам русского алфавита (за исключением букв "Ё" и "ё").
Если требуется задать символы, которые не могут стоять на данном месте в строке, то внутри квадратных скобок первым символом указывается символ ^ , например, [^A] означает любой символ, кроме "A".
Если внутри класса стоит метасимвол, он утрачивает свое специальное значие, например, [ab$] – означает, что в строке на этом месте могут стоять символы "a", "b" или "$";

· . – означает любой один символ (кроме символов новой строки);

· \ – если стоит перед метасимволом, экранирует его, т.е. делает обычным символом, например, \. – представляет обычную точку в тексте. И наоборот, символ \, стоящий перед обычным символом, делает его метасимволом, например, \d – обозначает любую цифру.
Для представления символа "\", который является метасимволом, в регулярном выражении как обычного символа, не имеющено специального значения, необходимо указать "\\". Поскольку РВ в языке Python являются строками, то, с учетом этого, символ "\" будет представлен в регулярном выражении как "\\\\". Чтобы этого избежать, можно воспользоваться префиксом "r" (см. подраздел 2.1 лаб. раб. №2), который создает строку, в которой все символы представляют сами себя. Таким образом '\n' является односимвольной строкой, представляющей символ новой строки, а r'\n' – строкой, состоящей из двух символов ("\" и "n"). Обычно используюется этот способ задания регулярных выражений;

· [\b] – символ backspace, не путать с \b, обозначающим границу слова ( см. подраздел 1.2);

· \cx – комбинация клавиш CTRL-x, где x – буква от A до Z, например, \cM означает CTRL-M;

· \d – любая цифра от 0 до 9 (эквивалентно классу [0-9]);

· \D – любой нецифровой символ;

· \f – символ новой страницы;

· \n – символ новой строки;

· \r – символ возврата каретки;

· \s – любой разделительный символ (эквивалентно классу [ \t\n\r\f\v]);

· \S – все, за исключением перечисленного в /s (эквивалентно классу [^ \t\n\r\f\v]). Поэтому для указания в регулярном выражении того, что на этом месте может стоять любой символ текста, можно использовать символьный класс [\s\S];

· \t – символ табуляции;

· \v – символ вертикальной табуляции;

· \w – латинская буква, цифра или знак подчеркивания (эквивалентно классу [A-Za-z0-9_]);

· \W – все, за исключением перечисленного в \w;

· | – разделяет допустимые варианты. Например, gray|grey соответствует gray или grey. Перебор вариантов выполняется слева направо. Если требуется указать перечень вариантов внутри более сложного РВ, то его нужно заключить в группу. Например, вариант gr[ae]y предпочтителен, так как сравнение с символьным классом выполняется проще, чем обработка группы с проверкой на все ее возможные модификаторы;

· \0 – None;

· \k – обратная ссылка на запомненную k-й парой скобок подстроку.

Оглавление

Позиция внутри строки

Следующие метасимволы позволяют спозиционировать регулярное выражение относительно элементов текста: начала и конца строки, границ слова:

· ^ – начало строки (позиция перед первым символом строки), т.е. проверяемый текст должен обязательно начинаться с начала строки;

· $ – конец строки (позиция после последнего символа строки), т.е. проверяемый текст должен обязательно заканчиваться в конце строки;

· \b – граница слова;

· \B – не граница слова;

· \A – начало строки, но в отличие от символа ^ не изменяет свое значение при наличии флага M;

· \Z – конец строки, но в отличие от символа $ не изменяет свое значение при наличии флага M.

Оглавление

Квалификаторы повторения

Квалификатор (англ. qualifier) повторения после символа, символьного класса или группы (см. подраздел 2.4 ) определяет, сколько раз предшествующее выражение может встречаться в строке:

· {n} – ровно n;

· {m,n} – от m до n включительно;

· {m,} – не менее m;

· {,n} – не более n;

· * (звезда Клини) – ноль или более, т.е. может и не встречаться;

· + – один или более;

· ? – ноль или один.

Если символы { } не образуют квалификатор, их специальное значение игнорируется.

Оглавление

Функции, методы и константы регулярных выражений

Модуль re

Для работы с регулярными выражениями на языке Python необходимо подключить модуль re, который содержит описания функций, констант и исключения.
Регулярные выражения на языке Python могут быть заданы в двух формах:

· в виде шаблонов регулярных выражений, представленных строками (класс str);

· в виде объектов регулярных выражений, полученных из шаблонов РВ путем их компиляции (класс RegexpObject).

Компиляция осуществляется с помощью функции compile (pattern[,flags]) модуля re, которая компилирует шаблон РВ pattern, заданный в виде строки, и возвращает результат в виде объекта регулярного выражеиния (экземпляра класса RegexpObject). Необязательный параметр flags позволяет модифицировать поведение регулярного выражения (см. подраздел 2.1.1 ).
Использование объектов РВ, которые имеют свои методы поиска (см. подраздел 2.2 ), вместо шаблонов РВ позволяет ускорить работу с регулярными выражениями. Кроме того, последние используемые объекты РВ кэшируются и не требуют повторной компиляции. Методы объектов РВ имеют дополнительные возможности по сравнению с функциями модуля re. Поэтому большинство нетривиальных решений использует именно объекты регулярных выражений.

Оглавление

Константы модуля re

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

· ASCII (A) – позволяет осуществлять сравнение при использовании \w, \W, \b, \B, \d, \D, \s и \S только с символами, заданными в ASCII-коде (вместо использования кода Unicode). Имеет смысл для шаблонов, заданных в коде Unicode;

· IGNORECASE (I) – позволяет игнорировать регистр символов;

· LOCALE (L) – позволяет учитывать при использовании \w, \W, \b, \B,\d, \D, \s и \S локальную кодировку (например, для некоторызх французких букв);

· MULTILINE (M) – позволяет символу '^' в строке, содержащей несколько символов новой строки, указывать начало поиска не только с начала строки, но и с начала каждой части строки, следующей за символом ('\n'), а символу '$' указывать окончание поиска не только в конце строки, но и перед каждым символом ('\n');

· DOTALL (S) – позволяет специальному символу '.' представлять любой символ, включая символ новой строки (без этого флага символ '.' представлял любой символ, не включая символа новой строки);

· VERBOSE (X) – позволяет задать регулярное выражение в виде, более ясном для понимания. При этом в РВ разрешается ставить разделительные символы (кроме тех, что указаны в символьных классах или тех, которые следуют за символом обратного слэша). Кроме того, в регулярном выражении можно указывать комментарии (используя символ '#'). Например, следующие два регулярных выражений эквивалентны (первое использует флаг X, второе – нет):

>>> import re
>>> a = re.compile( r"""\d + # the integral part
\. # the decimal point
\d * # some fractional digits""" , re.X) ;
>>> b = re.compile( r"\d+\.\d*" ) ;

Оглавление

Функции модуля re

Помимо функции compile () (см. подраздел 2.1 ) модуль re содержит следующие функции:

· search (pattern, string[, flags]) – просматривает строку string, сравнивая ее подстроки с шаблоном регулярного выражения pattern. При обнаружении такой подстроки – возвращает объект, экземпляр класса MatchObject. В противном случае – возвращает значение None;

· match (pattern, string[, flags]) – если нуль или больше символов начала строки string совпадают с шаблоном РВ pattern – возвращает объект, экземпляр класса MatchObject. В противном случае – возвращает значение None;

· split (pattern, string[, maxsplit=0, flags=0]) – разделяет строку string на подстроки и возвращает список подстрок. Разделителем служит шаблон РВ pattern. Необязательный параметр maxsplit указывает индекс последнего элемента списка. При этом оставшаяся часть строки добавляется в этот последний элемент:

>>> re.split ( '-','1-2-3-4-5-6' )
['1', '2', '3', '4', '5', '6']
>>> re.split ( '-','1-2-3-4-5-6' ,3)
['1', '2', '3', '4-5-6'] .

Если шаблон РВ взять в скобки, то содержимое шаблона будет включено в результирующий список подстрок:

>>> re.split ( '(-)','1-2-3-4-5-6' )
['1', '-', '2', '-', '3', '-', '4', '-', '5', '-', '6'] ;

· findall (pattern, string[, flags]) – возвращает список подстрок, найденных с помощью шаблона РВ pattern в строке string. При этом строка сканируется слева направо и совпадения включаются в список в порядке их обнаружения. Если одна или более групп указана в шаблоне, то возращается список групп. Это будет список кортежей, если шаблон имеет более одной группы:

>>> re.findall ( '(-)','r'\d','2 cats and 3 dogs' )
['2', '3'] ;

· finditer (pattern, string[, flags]) – возвращает найденные с помощью шаблона pattern подстроки строки string в виде итератора;

· sub (pattern, repl, string[, count, flags]) – возвращает строку, полученную путем замены самой левой подстроки, найденной шаблоном РВ pattern, в строке string на значение repl. Если подстрока не найдена – возращается исходная строка. Параметр repl может быть строкой или функцией.
Если это строка, то любой обратный слэш в esc-последовательности будет обрабатываться. Это значит, что "\n" преобразуется в символ новой строки. Неизвестная esc-последовательность, такая как "\j", остается без изменения. Обратные ссылки, такие как \6, заменяются подстрокой, найденной группой 6 регулярного выражения:

>>> s= 'It\'s a cat\n'
>>> re.sub ( 'cat' , 'small cat' ,s)
"It's a small cat\n" .

Если это функция, она вызывается по каждому непересекающемуся совпадению с шаблоном. Функция получает единственный аргумент в виде объекта типа match и возвращает значение в виде измененной строки;

· subn (pattern, repl, string[, count, flags]) – выполняет те же операции, что и функция sub(), но возвращает кортеж, элементами которого явзяются: измененная строка и число подстановок;

· escape (string) – возвращает строку string с добавлением обратых слэшей ко всем символам, не являющимися цифрами или буквами. Это бывает полезно сделать в случае поиска в произвольной строке, которая может содержать метасимволы РВ:

>>> re.escape ( '^Hello, world!#' )
'\\^Hello\\,\\ world\\!\\#' ;

· purge () – очищает кэш регулярных выражений;

Оглавление


Дата добавления: 2021-11-30; просмотров: 19; Мы поможем в написании вашей работы!

Поделиться с друзьями:






Мы поможем в написании ваших работ!