Простой Python. Современный стиль программирования (Любанович) - страница 109

Пробельный символ
\SНепробельный символ
\bГраница слова
\BНе граница слова

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

>>>> import string

>>>> printable = string.printable

>>>> len(printable)

>100

>>>> printable[0:50]

>'0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMN'

>>>> printable[50:]

>'OPQRSTUVWXYZ!"#$%&\'()*+,-./:;<=>?@[\\]^_`{|}~ \t\n\r\x0b\x0c'

Какие символы строки printable являются цифрами?

>>>> re.findall('\d', printable)

>['0', '1', '2', '3', '4', '5', '6', '7', '8', '9']

Какие символы являются цифрами, буквами и нижним подчеркиванием?

>>>> re.findall('\w', printable)

>['0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'a', 'b',

>'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n',

>'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z',

>'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L',

>'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X',

>'Y', 'Z', '_']

Какие символы являются пробелами?

>>>> re.findall('\s', printable)

>[' ', '\t', '\n', '\r', '\x0b', '\x0c']

Регулярные выражения не ограничиваются символами ASCII. Шаблон \d совпадет со всем, что в кодировке Unicode считается цифрой, а не только с символами ASCII от 0 до 9. Добавим две буквы в нижнем регистре не из ASCII из FileFormat.info.

В этой проверке мы добавим туда следующие символы:

• три буквы ASCII;

• три знака препинания, которые не должны совпасть с шаблоном \w;

• символ Unicode LATIN SMALL LETTER E WITH CIRCUMFLEX (\u00ea);

• символ Unicode LATIN SMALL LETTER E WITH BREVE (\u0115):

>>>> x = 'abc' + '-/*' + '\u00ea' + '\u0115'

Как и ожидалось, этот шаблон нашел только буквы:

>>>> re.findall('\w', x)

>['a', 'b', 'c', 'к', 'e']

Шаблоны: использование спецификаторов

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

В этой таблице expr и другие слова, выделенные курсивом, означают любое корректное регулярное выражение.

Таблица 7.4. Спецификаторы шаблонов
ШаблонСовпадения
abcБуквосочетание abc
(expr)expr
expr1 | expr2expr1 или expr2
Любой символ, кроме \n
^Начало строки источника
$Конец строки источника
prev?Ноль или одно включение prev
prev *Ноль или больше включений prev, максимальное количество
prev *?Ноль или больше включений prev, минимальное количество
prev +Одно или больше включений prev, максимальное количество