['I ', 'I ']
Текстовые строки
199
И наконец, сочетание wish, перед которым находится I:
>>> re.findall('(?<=I) wish', source)
[' wish', ' wish']
Существует несколько ситуаций, в которых правила шаблонов регулярных вы-
ражений конфликтуют с правилами для строк Python. Следующий шаблон должен
совпасть с любым словом, которое начинается с fish:
>>> re.findall('\bfish', source)
[]
Почему этого не произошло? Как мы говорили в главе 2, Python использует
специальные управляющие последовательности для строк. Например, \b для стро-
ки означает «возврат на шаг», но в мини-языке регулярных выражений эта после-
довательность означает начало слова. Избегайте случайного применения управля-
ющих последовательностей, используя неформатированные строки Python, когда
определяете строку регулярного выражения. Всегда размещайте символ r перед
строкой шаблона регулярного выражения, и управляющие последовательности
Python будут отключены, как показано здесь:
>>> re.findall(r'\bfish', source)
['fish']
Шаблоны: указываем способ вывода совпадения
При использовании функций match() или search() все совпадения можно получить
из объекта результата m, вызвав функцию m.group(). Если вы заключите шаблон в круг-
лые скобки, совпадения будут сохранены в отдельную группу и кортеж, состоящий
из них, окажется доступен благодаря вызову m.groups(), как показано здесь:
>>> m = re.search(r'(. dish\b).*(\bfish)', source)
>>> m.group()
'a dish of fish'
>>> m.groups()
('a dish', 'fish')
Если вы используете этот шаблон (?P< name > expr ), он совпадет с выражением
expr, сохраняя совпадение в группе name:
>>> m = re.search(r'(?P<DISH>. dish\b).*(?P<FISH>\bfish)', source)
>>> m.group()
'a dish of fish'
>>> m.groups()
('a dish', 'fish')
>>> m.group('DISH')
'a dish'
>>> m.group('FISH')
'fish'
200
Глава 7. Работаем с данными профессионально
Бинарные данные
Работать с текстовыми данными может быть трудно, но работать с бинарными
может быть… интересно. Вам нужно знать о таких концепциях, как порядок следо-
ваниябайтов (как процессор вашего компьютера разбивает данные на байты)
и знаковые биты для целых чисел. Вам может понадобиться закопаться в бинарные