>>> '{0:>10.4d} {1:>10.4f} {2:10.4s}'.format(n, f, s)
Traceback (most recent call last):
··File "
ValueError: Precision not allowed in integer format specifier
>>> '{0:>10d} {1:>10.4f} {2:>10.4s}'.format(n, f, s)
'········42·····7.0300·······stri'
Последняя опция — это
>>> '{0:!^20s}'.format('BIG SALE')
'!!!!!!BIG SALE!!!!!!'
Совпадение с регулярными выражениями
В главе 2 немного рассматривались операции со строками. Вооружившись этой промежуточной информацией, вы, возможно, использовали простые шаблоны в командной строке, содержащие символ подстановки, вроде ls *.py, что означает «перечислить все имена файлов, заканчивающиеся на. py».
Пришло время рассмотреть более сложный механизм проверки на совпадение с шаблоном —
result = re.match('You', 'Young Frankenstein')
В этом примере строка 'You' является
Для более сложных проверок вам нужно
youpattern = re.compile('You')
Далее вы можете выполнить проверку с помощью скомпилированного шаблона:
result = youpattern.match('Young Frankenstein')
Функция match() — это не единственный способ сравнить шаблон и источник, существует еще несколько методов.
• search() возвращает первое совпадение, если таковое имеется.
• findall() возвращает список всех непересекающихся совпадений, если таковые имеются.
• split() разбивает источник на совпадения с шаблоном и возвращает список всех фрагментов строки.
• sub() принимает
Начинается ли строка 'Young Frankenstein' со слова 'You'? Рассмотрим пример кода с комментариями:
>>> import re
>>> source = 'Young Frankenstein'
>>> m = re.match('You', source)··# функция начинает работать с начала источника
>>> if m:··# функция возвращает объект; делайте это, чтобы увидеть, что совпало
…·····print(m.group())
…
You
>>> m = re.match('^You', source) # якорь в начале строки делает то же самое
>>> if m:
…·····print(m.group())
…
You
Как насчет 'Frank'?
>>> m = re.match('Frank', source)
>>> if m:
…·····print(m.group())
…
В этот раз функция match() не вернула ничего, и оператор if не запустил оператор print. Как я говорил ранее, функция match() работает только в том случае, если шаблон находится в начале источника. Но функция search() ищет шаблон в любом месте источника:
>>> m = re.search('Frank', source)
>>> if m:
…······print(m.group())
…
Frank
Изменим шаблон:
>>> m = re.match('.*Frank', source)
>>> if m:··# match returns an object
…·····print(m.group())
…
Young Frank
Кратко объясню, как работает наш новый шаблон:
• символ. означает любой символ;
• символ * означает любое количество предыдущих элементов. Если объединить символы.*, они будут означать любое количество символов (даже ноль);
• 'Frank' — это фраза, которую мы хотим найти в любом месте строки.
Функция match() вернула строку, в которой нашлось совпадение с шаблоном.*Frank: 'Young Frank'.
Вы можете использовать функцию search(), чтобы найти шаблон 'Frank' в любом месте строки-источника 'Young Frankenstein', не прибегая к использованию символа подстановки.*:
>>> m = re.search('Frank', source)