Вы можете использовать функцию search(), чтобы найти шаблон 'Frank' в любом месте строки-источника 'Young Frankenstein', не прибегая к использованию символа подстановки.*:
>>>> m = re.search('Frank', source)
>>>> if m:··# функция search возвращает объект
>…·····print(m.group())
>…
>Frank
Ищем все совпадения с помощью функции findall()
В предыдущих примерах мы искали только одно совпадение. Но что, если вы хотите узнать, сколько раз строка, содержащая один символ n, встречается в строке-источнике?
>>>> m = re.findall('n', source)
>>>> m···# findall returns a list
>['n', 'n', 'n', 'n']
>>>> print('Found', len(m), 'matches')
>Found 4 matches
Как насчет строки 'n', за которой следует любой символ?
>>>> m = re.findall('n.', source)
>>>> m
>['ng', 'nk', 'ns']
Обратите внимание на то, что в совпадения не была записана последняя строка 'n'. Нам нужно сказать, что символ после 'n' является опциональным, с помощью конструкции?:
>>>> m = re.findall('n.?', source)
>>>> m
>['ng', 'nk', 'ns', 'n']
Разбиваем совпадения с помощью функции split()
В следующем примере показано, как разбить строку на список с помощью шаблона, а не простой строки (как это делает метод split()):
>>>> m = re.split('n', source)
>>>> m····# функция split возвращает список
>['You', 'g Fra', 'ke', 'stei', '']
Заменяем совпадения с помощью функции sub()
Этот метод похож на метод replace(), но он ищет совпадения с шаблонами, а не простые строки:
>>>> m = re.sub('n', '?', source)
>>>> m···# sub returns a string
>'You?g Fra?ke?stei?'
Шаблоны: специальные символы
Многие описания регулярных выражений начинаются с деталей, касающихся того, как их определить. Я считаю, что это ошибка. Язык регулярных выражений не так уж мал сам по себе, слишком много деталей должно вместиться в вашу голову одновременно. Они используют так много знаков препинания, что это выглядит так, будто персонажи мультиков ругаются.
Теперь, когда вы знаете о нужных функциях (match(), search(), findall() и sub()), рассмотрим детали построения регулярных выражений. Создаваемые вами шаблоны подойдут к любой из этих функций.
Самые простые знаки вы уже видели.
• Совпадения с любыми неспециальными символами.
• Любой отдельный символ, кроме \n, — это символ..
• Любое число, включая 0, — это символ *.
• Опциональное значение (0 или 1) — это символ?.
Специальные символы показаны в табл. 7.3.
Таблица 7.3. Специальные символы
Шаблон | Совпадения |
\d | Цифровой символ |
\D | Нецифровой символ |
\w | Буквенный или цифровой символ или знак подчеркивания |
\W | Любой символ, кроме буквенного или цифрового символа или знака подчеркивания |
\s |