string — Общие операции со строками
Исходный код: Lib/string.py
Константы строк
Константы, определенные в этом модуле:
-
string.ascii_letters -
Объединение констант
ascii_lowercaseиascii_uppercase, описанных ниже. Это значение не зависит от локали.
-
string.ascii_lowercase -
Строчные буквы
'abcdefghijklmnopqrstuvwxyz'. Это значение не зависит от локали и не будет меняться.
-
string.ascii_uppercase -
Заглавные буквы
'ABCDEFGHIJKLMNOPQRSTUVWXYZ'. Это значение не зависит от локали и не будет меняться.
-
string.digits -
Строка
'0123456789'.
-
string.hexdigits -
Строка
'0123456789abcdefABCDEF'.
-
string.octdigits -
Строка
'01234567'.
-
string.punctuation -
Строка ASCII-символов, считающихся знаками пунктуации в локали
C:!"#$%&'()*+,-./:;<=>?@[\]^_`{|}~.
-
string.printable -
Строка ASCII-символов, считающиеся печатными. Это комбинация
digits,ascii_letters,punctuationиwhitespace.
-
string.whitespace -
Строка, содержащая все ASCII-символы, считающиеся пробелами. Это включает пробел, табуляцию, перевод строки, возврат каретки, подачу формы и вертикальную табуляцию.
Пользовательское форматирование строк
Встроенный класс строк предоставляет возможность выполнять сложные подстановки переменных и форматирование значений с помощью метода format(), описанного в PEP 3101. Класс Formatter в модуле string позволяет создавать и настраивать собственные методы форматирования строк, используя ту же реализацию, что и встроенный метод format().
-
class string.Formatter -
Класс
Formatterимеет следующие публичные методы:-
format(format_string, /, *args, **kwargs) -
Основной метод API. Он принимает строку формата и произвольный набор позиционных и именованных аргументов. Это просто обертка, которая вызывает
vformat().Изменено в версии 3.7: Аргумент строки формата теперь только позиционный.
-
vformat(format_string, args, kwargs) -
Эта функция выполняет фактическую работу по форматированию. Она доступна как отдельная функция для случаев, когда вы хотите передать предопределенный словарь аргументов, а не распаковывать и упаковывать словарь как отдельные аргументы, используя синтаксис
*argsи**kwargs.vformat()выполняет работу по разделению строки формата на данные символов и поля замещения. Она вызывает различные методы, описанные ниже.
Кроме того, класс
Formatterопределяет ряд методов, которые должны быть перезаписаны подклассами:-
parse(format_string) -
Перебирает строку формата и возвращает итерируемый объект кортежей (literal_text, field_name, format_spec, conversion). Это используется
vformat()для разбиения строки на литеральные тексты или поля замещения.Значения в кортеже концептуально представляют отрезок литерального текста, за которым следует одно поле замещения. Если нет литерального текста (что может произойти, если две последовательно расположенные поля замещения), то literal_text будет пустой строкой. Если нет поля замещения, то значения field_name, format_spec и conversion будут
None.
-
get_field(field_name, args, kwargs) -
Принимая field_name, возвращенное
parse()(см. выше), преобразует его в объект для форматирования. Возвращает кортеж (объект, используемый_ключ). Стандартная версия принимает строки, определенные в PEP 3101, например «0[имя]» или «метка.заголовок». args и kwargs передаются вvformat(). Значение возвращаемого used_key имеет то же значение, что и параметр key дляget_value().
-
get_value(key, args, kwargs) -
Извлечение значения заданного поля. Аргумент key будет целым числом или строкой. Если это целое число, оно представляет собой индекс позиционного аргумента в args; если это строка, то это имя аргумента в kwargs.
Параметр args устанавливается в список позиционных аргументов для
vformat(), а параметр kwargs устанавливается в словарь именованных аргументов.Для составных имен полей эти функции вызываются только для первого компонента имени поля; последующие компоненты обрабатываются с помощью обычных операций атрибутов и индексирования.
Например, выражение поля «0.имя» приведет к вызову
get_value()с аргументом key равным 0. Атрибутnameбудет получен послеget_value()с помощью вызова встроенной функцииgetattr().Если индекс или имя не ссылаются на элемент, то должно быть выброшено исключение
IndexErrorилиKeyError.
-
check_unused_args(used_args, args, kwargs) -
Реализуйте проверку неиспользованных аргументов при необходимости. Аргументы этой функции — множество всех ключей аргументов, которые фактически использовались в строке формата (целые числа для позиционных аргументов и строки для именованных аргументов), и ссылки на args и kwargs, которые были переданы в vformat. Множество неиспользованных аргументов может быть вычислено из этих параметров. Предполагается, что
check_unused_args()выбросит исключение, если проверка не пройдена.
-
format_field(value, format_spec) -
format_field()просто вызывает встроенную глобальную функциюformat(). Метод предоставляется для того, чтобы подклассы могли его переопределять.
-
convert_field(value, conversion) -
Преобразует значение (возвращенное
get_field()) с учетом типа преобразования (как в кортеже, возвращаемом методомparse()). Стандартная версия понимает типы преобразования ‘s’ (str), ‘r’ (repr) и ‘a’ (ascii).
-
Синтаксис строк форматирования
Метод str.format() и класс Formatter используют одинаковый синтаксис для строк форматирования (хотя в случае Formatter подклассы могут определять свой собственный синтаксис строк форматирования). Синтаксис связан с синтаксисом строковых литералов с форматированием, но он менее сложный и, в частности, не поддерживает произвольные выражения.
Строки форматирования содержат «поля замены», окружённые фигурными скобками {}. Всё, что не находится в фигурных скобках, рассматривается как литеральный текст, который без изменений копируется в выходные данные. Если вам нужно включить символ фигурной скобки в литеральный текст, его можно экранировать, повторив: {{ и }}.
Грамматика поля замены следующая:
replacement_field ::= "{" [field_name] ["!" conversion] [":" format_spec] "}"
field_name ::= arg_name ("." attribute_name | "[" element_index "]")*
arg_name ::= [identifier | digit+]
attribute_name ::= identifier
element_index ::= digit+ | index_string
index_string ::= <any source character except "]"> +
conversion ::= "r" | "s" | "a"
format_spec ::= <described in the next section>
Проще говоря, поле замены может начинаться с имени_поля, которое указывает объект, значение которого нужно отформатировать и вставить в выходные данные вместо поля замены. Имя_поля необязательно может следовать за полем преобразования, которое предшествует восклицательному знаку '!', и спецификатором_формата, который предшествует двоеточию ':'. Они задают нестандартный формат значения замены.
См. также раздел Спецификатор формата.
Само имя_поля начинается с имени_аргумента, которое является либо числом, либо ключевым словом. Если это число, оно относится к позиционному аргументу, а если ключевое слово, оно относится к именованному аргументу. Если числовые имена аргументов в строке форматирования — 0, 1, 2 и так далее последовательно, их все можно опустить (не только некоторые), и числа 0, 1, 2 и так далее будут автоматически вставлены в этом порядке. Поскольку имя_аргумента не заключено в кавычки, невозможно указать произвольные ключи словаря (например, строки '10' или ':-]') внутри строки форматирования. К имени_аргумента могут быть добавлены любое количество выражений индекса или атрибута. Выражение вида '.name' выбирает именованный атрибут, используя getattr(), а выражение вида '[index]' выполняет поиск по индексу, используя __getitem__().
Изменено в версии 3.1: Позиционные спецификаторы аргументов могут быть опущены для str.format(), поэтому '{} {}'.format(a, b) эквивалентно '{0} {1}'.format(a, b).
Изменено в версии 3.4: Позиционные спецификаторы аргументов могут быть опущены для Formatter.
Примеры простых строк форматирования:
"First, thou shalt count to {0}" # References first positional argument
"Bring me a {}" # Implicitly references the first positional argument
"From {} to {}" # Same as "From {0} to {1}"
"My quest is {name}" # References keyword argument 'name'
"Weight in tons {0.weight}" # 'weight' attribute of first positional arg
"Units destroyed: {players[0]}" # First element of keyword argument 'players'.
Поле преобразования вызывает приведение типа перед форматированием. Обычно задача форматирования значения выполняется методом __format__() самого значения. Однако в некоторых случаях желательно принудительно отформатировать тип как строку, переопределив собственное определение форматирования. Преобразуя значение в строку перед вызовом __format__(), обходит обычную логику форматирования.
В настоящее время поддерживаются три флага преобразования: '!s' вызывающий str() для значения, '!r' вызывающий repr() и '!a' вызывающий ascii().
Примеры:
"Harold's a clever {0!s}" # Calls str() on the argument first
"Bring out the holy {name!r}" # Calls repr() on the argument first
"More {!a}" # Calls ascii() on the argument first
Поле спецификатора_формата содержит описание того, как должно быть представлено значение, включая такие детали, как ширина поля, выравнивание, заполнение, десятичная точность и так далее. Каждый тип значения может определять свой собственный «мини-язык форматирования» или интерпретацию спецификатора_формата.
Большинство встроенных типов поддерживают общий мини-язык форматирования, который описан в следующем разделе.
Поле спецификатора_формата также может включать вложенные поля замены в нём. Эти вложенные поля замены могут содержать имя поля, флаг преобразования и спецификатор формата, но более глубокое вложение не допускается. Поля замены внутри спецификатора_формата подставляются перед интерпретацией строки спецификатора_формата. Это позволяет динамически задавать форматирование значения.
См. раздел Примеры форматирования для примеров.
Форматное спецификаторное мини-язык
«Форматные спецификаторы» используются внутри полей замещения, содержащихся в строке форматирования, чтобы определить, как отдельные значения будут представлены (см. Синтаксис строки форматирования и Форматированные строковые литералы). Они также могут быть переданы непосредственно в встроенную функцию format(). Каждый форматируемый тип может определить, как интерпретировать форматную спецификацию.
Большинство встроенных типов реализуют следующие варианты для форматных спецификаций, хотя некоторые из опций форматирования поддерживаются только числовыми типами.
Общая конвенция заключается в том, что пустая форматная спецификация даёт такой же результат, как если бы вы вызывали str() для значения. Непустая форматная спецификация обычно изменяет результат.
Общая форма стандартного спецификатора форматирования:
format_spec ::= [[fill]align][sign][#][0][width][grouping_option][.precision][type] fill ::= <any character> align ::= "<" | ">" | "=" | "^" sign ::= "+" | "-" | " " width ::= digit+ grouping_option ::= "_" | "," precision ::= digit+ type ::= "b" | "c" | "d" | "e" | "E" | "f" | "F" | "g" | "G" | "n" | "o" | "s" | "x" | "X" | "%"
Если указано допустимое значение выравнивания, ему может предшествовать символ заполнения, который может быть любым символом и по умолчанию является пробелом, если он опущен. Невозможно использовать литерную фигурную скобку (”{” или “}”) в качестве символа заполнения в форматированной строковой литерале или при использовании метода str.format(). Однако можно вставить фигурную скобку с вложенным полем замещения. Это ограничение не влияет на функцию format().
Значение различных опций выравнивания следующие:
Опция | Значение |
|---|---|
| Принудительно выравнивает поле влево внутри доступного пространства (по умолчанию для большинства объектов). |
| Принудительно выравнивает поле вправо внутри доступного пространства (по умолчанию для чисел). |
| Принудительно помещает отступ после знака (если есть), но перед цифрами. Используется для печати полей в формате ‘+000000120’. Эта опция выравнивания допустима только для числовых типов. Она становится значением по умолчанию, когда «0» непосредственно предшествует ширине поля. |
| Принудительно выравнивает поле по центру внутри доступного пространства. |
Обратите внимание, что если минимальная ширина поля не определена, ширина поля всегда будет такой же, как и данные, которые необходимо в него поместить, поэтому опция выравнивания в этом случае не имеет значения.
Опция знака допустима только для числовых типов и может быть одной из следующих:
Опция | Значение |
|---|---|
| указывает, что знак должен использоваться как для положительных, так и для отрицательных чисел. |
| указывает, что знак должен использоваться только для отрицательных чисел (это поведение по умолчанию). |
space | указывает, что для положительных чисел должен использоваться ведущий пробел, а для отрицательных чисел — знак минус. |
Опция '#' вызывает использование «альтернативной формы» для преобразования. Альтернативная форма определяется по-разному для разных типов. Эта опция допустима только для целых, вещественных и комплексных чисел. Для целых чисел, при использовании двоичной, восьмеричной или шестнадцатеричной записи, эта опция добавляет префикс соответствующего '0b', '0o', или '0x' к значению вывода. Для вещественных и комплексных чисел альтернативная форма приводит к тому, что результат преобразования всегда содержит десятичную запятую, даже если за ней нет цифр. Обычно десятичная запятая появляется в результате этих преобразований только в том случае, если за ней следует цифра. Кроме того, для преобразований 'g' и 'G' конечные нули не удаляются из результата.
Опция ',' сигнализирует о использовании запятой в качестве разделителя тысяч. Для использования разделителя, учитывающего локаль, используйте тип представления целого числа 'n'.
Изменено в версии 3.1: Добавлена опция ',' (см. также PEP 378).
Опция '_' сигнализирует об использовании нижнего подчеркивания в качестве разделителя тысяч для представлений чисел с плавающей точкой и для типа представления целого числа 'd'. Для типов представления целых чисел 'b', 'o', 'x', и 'X', нижние подчеркивания будут вставлены каждые 4 цифры. Для других типов представления указание этой опции является ошибкой.
Изменено в версии 3.6: Добавлена опция '_' (см. также PEP 515).
width — десятичное целое число, определяющее минимальную общую ширину поля, включая любые префиксы, разделители и другие символы форматирования. Если не указано, ширина поля определяется содержимым.
Когда явное выравнивание не задано, добавление символа ноль ('0') перед полем width включает в себя знаково-зависимый нулевой отступ для числовых типов. Это эквивалентно символу заполнения '0' с типом выравнивания '='.
precision — десятичное число, указывающее, сколько цифр должно быть отображено после десятичной точки для вещественного значения, отформатированного с помощью 'f' и 'F', или до и после десятичной точки для вещественного значения, отформатированного с помощью 'g' или 'G'. Для типов, не являющихся числами, поле указывает максимальный размер поля — другими словами, сколько символов будет использовано из содержимого поля. precision недопустимо для целочисленных значений.
Наконец, type определяет, как должны быть представлены данные.
Доступные типы представления строк:
Тип | Значение |
|---|---|
| Формат строки. Это тип по умолчанию для строк и может быть опущен. |
None | То же, что и |
Доступные типы представления целых чисел:
Тип | Значение |
|---|---|
| Двоичный формат. Выводит число в двоичной системе счисления. |
| Символ. Преобразует целое число в соответствующий символ Юникода перед печатью. |
| Десятичное целое число. Выводит число в десятичной системе счисления. |
| Восьмеричный формат. Выводит число в восьмеричной системе счисления. |
| Шестнадцатеричный формат. Выводит число в шестнадцатеричной системе счисления, используя строчные буквы для цифр, больших 9. |
| Шестнадцатеричный формат. Выводит число в шестнадцатеричной системе счисления, используя прописные буквы для цифр, больших 9. |
| Число. Это то же самое, что и |
None | То же, что и |
В дополнение к вышеперечисленным типам представления, целые числа могут быть отформатированы с помощью типов представления чисел с плавающей запятой, перечисленных ниже (за исключением 'n' и None). В этом случае для преобразования целого числа в число с плавающей запятой используется float().
Тип | Значение |
|---|---|
| Научная запись. Для заданной точности |
| Научная запись. Аналогично |
| Формат с фиксированной точкой. Для заданной точности |
| Формат с фиксированной точкой. Аналогично |
|
Общий формат. Для заданной точности Точные правила следующие: предположим, что результат, отформатированный с типом представления При отсутствии точности используется точность Положительная и отрицательная бесконечность, положительный и отрицательный ноль, и nans форматируются как |
| Общий формат. Аналогично |
| Число. Это то же, что |
| Процент. Умножает число на 100 и отображает в формате с фиксированной ( |
None |
Для Для Общий эффект заключается в соответствии с выводом |
Примеры форматов
В этом разделе содержатся примеры синтаксиса str.format() и сравнение со старым форматом %.
В большинстве случаев синтаксис похож на старый формат % с добавлением {} и использованием : вместо % Например, '%03.2f' можно перевести на '{:03.2f}'.
Новый синтаксис формата также поддерживает новые и разные варианты, показанные в следующих примерах.
Обращение к аргументам по позиции:
>>> '{0}, {1}, {2}'.format('a', 'b', 'c')
'a, b, c'
>>> '{}, {}, {}'.format('a', 'b', 'c') # 3.1+ only
'a, b, c'
>>> '{2}, {1}, {0}'.format('a', 'b', 'c')
'c, b, a'
>>> '{2}, {1}, {0}'.format(*'abc') # unpacking argument sequence
'c, b, a'
>>> '{0}{1}{0}'.format('abra', 'cad') # arguments' indices can be repeated
'abracadabra'
Обращение к аргументам по имени:
>>> 'Coordinates: {latitude}, {longitude}'.format(latitude='37.24N', longitude='-115.81W')
'Coordinates: 37.24N, -115.81W'
>>> coord = {'latitude': '37.24N', 'longitude': '-115.81W'}
>>> 'Coordinates: {latitude}, {longitude}'.format(**coord)
'Coordinates: 37.24N, -115.81W'
Обращение к атрибутам аргументов:
>>> c = 3-5j
>>> ('The complex number {0} is formed from the real part {0.real} '
... 'and the imaginary part {0.imag}.').format(c)
'The complex number (3-5j) is formed from the real part 3.0 and the imaginary part -5.0.'
>>> class Point:
... def __init__(self, x, y):
... self.x, self.y = x, y
... def __str__(self):
... return 'Point({self.x}, {self.y})'.format(self=self)
...
>>> str(Point(4, 2))
'Point(4, 2)'
Обращение к элементам аргументов:
>>> coord = (3, 5)
>>> 'X: {0[0]}; Y: {0[1]}'.format(coord)
'X: 3; Y: 5'
Замена %s и %r:
>>> "repr() shows quotes: {!r}; str() doesn't: {!s}".format('test1', 'test2')
"repr() shows quotes: 'test1'; str() doesn't: test2"
Выравнивание текста и указание ширины:
>>> '{:<30}'.format('left aligned')
'left aligned '
>>> '{:>30}'.format('right aligned')
' right aligned'
>>> '{:^30}'.format('centered')
' centered '
>>> '{:*^30}'.format('centered') # use '*' as a fill char
'***********centered***********'
Замена %+f, %-f, и % f и указание знака:
>>> '{:+f}; {:+f}'.format(3.14, -3.14) # show it always
'+3.140000; -3.140000'
>>> '{: f}; {: f}'.format(3.14, -3.14) # show a space for positive numbers
' 3.140000; -3.140000'
>>> '{:-f}; {:-f}'.format(3.14, -3.14) # show only the minus -- same as '{:f}; {:f}'
'3.140000; -3.140000'
Замена %x и %o и преобразование значения в разные системы счисления:
>>> # format also supports binary numbers
>>> "int: {0:d}; hex: {0:x}; oct: {0:o}; bin: {0:b}".format(42)
'int: 42; hex: 2a; oct: 52; bin: 101010'
>>> # with 0x, 0o, or 0b as prefix:
>>> "int: {0:d}; hex: {0:#x}; oct: {0:#o}; bin: {0:#b}".format(42)
'int: 42; hex: 0x2a; oct: 0o52; bin: 0b101010'
Использование запятой в качестве разделителя тысяч:
>>> '{:,}'.format(1234567890)
'1,234,567,890'
Выражение процента:
>>> points = 19
>>> total = 22
>>> 'Correct answers: {:.2%}'.format(points/total)
'Correct answers: 86.36%'
Использование форматирования, специфичного для типа:
>>> import datetime
>>> d = datetime.datetime(2010, 7, 4, 12, 15, 58)
>>> '{:%Y-%m-%d %H:%M:%S}'.format(d)
'2010-07-04 12:15:58'
Вложенные аргументы и более сложные примеры:
>>> for align, text in zip('<^>', ['left', 'center', 'right']):
... '{0:{fill}{align}16}'.format(text, fill=align, align=align)
...
'left<<<<<<<<<<<<'
'^^^^^center^^^^^'
'>>>>>>>>>>>right'
>>>
>>> octets = [192, 168, 0, 1]
>>> '{:02X}{:02X}{:02X}{:02X}'.format(*octets)
'C0A80001'
>>> int(_, 16)
3232235521
>>>
>>> width = 5
>>> for num in range(5,12):
... for base in 'dXob':
... print('{0:{width}{base}}'.format(num, base=base, width=width), end=' ')
... print()
...
5 5 5 101
6 6 6 110
7 7 7 111
8 8 10 1000
9 9 11 1001
10 A 12 1010
11 B 13 1011
Строки шаблонов
Строки шаблонов предоставляют более простые подстановки строк, как описано в PEP 292. Основной случай использования строк шаблонов — интернационализация (i18n), так как в этом контексте более простой синтаксис и функциональность делают их проще переводить, чем другие встроенные средства форматирования строк в Python. Пример библиотеки, построенной на строках шаблонов для i18n, см. в пакете flufl.i18n.
Строки шаблонов поддерживают подстановки, основанные на $, используя следующие правила:
-
$$— это экранирование; оно заменяется одним$. -
$identifierзадаёт имя подстановки, соответствующей ключу отображения"identifier". По умолчанию,"identifier"ограничен любым регистронезависимым ASCII буквенно-цифровым строковым значением (включая символы подчеркивания), начинающимся с символа подчеркивания или ASCII буквы. Первый неидентификаторный символ после символа$завершает это описание места для подстановки. -
${identifier}эквивалентно$identifier. Это требуется, когда за местом для подстановки следуют допустимые символы идентификаторов, но они не являются частью места для подстановки, например"${noun}ification".
Любое другое появление $ в строке приведёт к тому, что будет поднято исключение ValueError.
Модуль string предоставляет класс Template, реализующий эти правила. Методы Template:
-
class string.Template(template) -
Конструктор принимает единственный аргумент — строку шаблона.
-
substitute(mapping={}, /, **kwds) -
Выполняет подстановку шаблона, возвращая новую строку. mapping — это любой объект наподобие словаря с ключами, соответствующими местам для подстановки в шаблоне. В качестве альтернативы можно передать ключевые аргументы, где ключевые слова — это места для подстановки. Когда и mapping, и kwds переданы, а дубликаты есть, места для подстановки из kwds имеют приоритет.
-
safe_substitute(mapping={}, /, **kwds) -
Подобно
substitute(), за исключением того, что если места для подстановки отсутствуют в mapping и kwds, вместо поднятия исключенияKeyErrorисходное место для подстановки отобразится в результирующей строке без изменений. Кроме того, в отличие отsubstitute(), любые другие появления$просто вернут$вместо поднятия исключенияValueError.Хотя могут возникнуть и другие исключения, этот метод называется «безопасным», потому что он всегда пытается вернуть используемую строку вместо поднятия исключения. В другом смысле
safe_substitute()может быть чем-то иным, кроме безопасного, так как он будет безмолвно игнорировать неправильно сформированные шаблоны, содержащие висящие разделители, непарные фигурные скобки или места для подстановки, которые не являются допустимыми идентификаторами Python.
Экземпляры
Templateтакже предоставляют одно общедоступное атрибут данных:-
template -
Это объект, переданный в аргумент template конструктора. В общем случае его не следует изменять, но доступ для чтения только не навязывается.
-
Вот пример использования шаблона:
>>> from string import Template
>>> s = Template('$who likes $what')
>>> s.substitute(who='tim', what='kung pao')
'tim likes kung pao'
>>> d = dict(who='tim')
>>> Template('Give $who $100').substitute(d)
Traceback (most recent call last):
...
ValueError: Invalid placeholder in string: line 1, col 11
>>> Template('$who likes $what').substitute(d)
Traceback (most recent call last):
...
KeyError: 'what'
>>> Template('$who likes $what').safe_substitute(d)
'tim likes $what'
Расширенное использование: можно создавать подклассы Template для настройки синтаксиса места для подстановки, символа разделителя или всего регулярного выражения, используемого для разбора строк шаблонов. Для этого можно переопределить эти атрибуты класса:
-
delimiter — это буквальная строка, описывающая разделитель, вводящий место для подстановки. Значение по умолчанию —
$. Обратите внимание, что это не должно быть регулярное выражение, так как реализация будет вызыватьre.escape()на этой строке по мере необходимости. Обратите также внимание, что вы не можете изменить разделитель после создания класса (т. е. другой разделитель должен быть установлен в пространстве имен класса подкласса). -
idpattern — это регулярное выражение, описывающее шаблон для мест для подстановки без фигурных скобок. Значение по умолчанию — регулярное выражение
(?a:[_a-z][_a-z0-9]*). Если это задано и braceidpattern равноNone, этот шаблон также будет применяться к местам для подстановки в фигурных скобках.Примечание
Поскольку значение по умолчанию flags равно
re.IGNORECASE, шаблон[a-z]может соответствовать некоторым не-ASCII символам. Вот почему здесь мы используем локальный флагa.Изменено в версии 3.7: braceidpattern можно использовать для определения отдельных шаблонов, используемых внутри и вне фигурных скобок.
-
braceidpattern — это такое же, как idpattern, но описывает шаблон для мест для подстановки в фигурных скобках. По умолчанию равно
None, что означает возврат к idpattern (т. е. один и тот же шаблон используется как внутри, так и вне фигурных скобок). Если задано, это позволяет определить разные шаблоны для мест для подстановки в фигурных скобках и без них.Введено в версии 3.7.
-
flags — флаги регулярных выражений, которые будут применены при компиляции регулярного выражения для распознавания замен. Значение по умолчанию —
re.IGNORECASE. Обратите внимание, чтоre.VERBOSEвсегда будет добавлен к флагам, поэтому пользовательские idpattern должны следовать соглашениям для подробных регулярных выражений.Введено в версии 3.2.
В качестве альтернативы вы можете передать полное регулярное выражение, переопределив атрибут класса pattern. В этом случае значение должно быть объектом регулярного выражения с четырьмя именованными группами захвата. Группы захвата соответствуют правилам, описанным выше, а также правилу для недопустимых мест для подстановки:
-
escaped — эта группа соответствует последовательности экранирования, например,
$$, в шаблоне по умолчанию. - named — эта группа соответствует имени места для подстановки без фигурных скобок; она не должна включать разделитель в группе захвата.
- braced — эта группа соответствует имени места для подстановки в фигурных скобках; она не должна включать ни разделитель, ни фигурные скобки в группе захвата.
- invalid — эта группа соответствует любому другому шаблону разделителя (обычно одиночный разделитель), и она должна стоять последней в регулярном выражении.
Вспомогательные функции
-
string.capwords(s, sep=None) -
Разделяет аргумент на слова с помощью
str.split(), капитализирует каждое слово с помощьюstr.capitalize()и соединяет капитализированные слова с помощьюstr.join(). Если необязательный второй аргумент sep отсутствует илиNone, пробелы заменяются одним пробелом, а ведущие и хвостовые пробелы удаляются, в противном случае используется sep для разделения и соединения слов.
© 2001–2022 Python Software Foundation
Licensed under the PSF License.
https://docs.python.org/3.8/library/string.html