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()для разбиения строки на либо литеральные тексты, либо поля замены.
-
get_field(field_name, args, kwargs) -
На основе field_name, возвращённого
parse(), преобразует его в объект для форматирования. Возвращает кортеж (объект, использованный_ключ). По умолчанию версия принимает строки в формате, определённом в PEP 3101, такие как “0[имя]” или “метка.заглавные”. args и kwargs передаются вvformat().
-
get_value(key, args, kwargs) -
Получает значение заданного поля. Аргумент ключ может быть целым числом или строкой. Если это целое число, оно представляет индекс позиционного аргумента в args; если это строка, то она представляет именованный аргумент в kwargs.
-
check_unused_args(used_args, args, kwargs) -
Реализует проверку неиспользуемых аргументов при необходимости.
-
format_field(value, format_spec) -
Просто вызывает встроенную функцию
format().
-
convert_field(value, conversion) -
Преобразует значение (возвращаемое
get_field()) с типом преобразования (как в кортеже, возвращённом методомparse()).
-
Синтаксис строк форматирования
Метод 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(). Однако вложение поля замены позволяет вставить фигурную скобку.
Значение различных вариантов выравнивания следующие:
Параметр | Значение |
|---|---|
| Принудительно выравнивает поле влево в доступном пространстве (это значение по умолчанию для большинства объектов). |
| Принудительно выравнивает поле вправо в доступном пространстве (это значение по умолчанию для чисел). |
| Принудительно размещает отступ после знака (если есть), но перед цифрами. Используется для вывода полей в формате ‘+000000120’. Этот параметр выравнивания действителен только для числовых типов. Он становится значением по умолчанию, когда «0» непосредственно предшествует ширине поля. |
| Принудительно центрирует поле в доступном пространстве. |
Обратите внимание, что если не определена минимальная ширина поля, ширина поля всегда будет такой же, как и данные, которые нужно в неё поместить, поэтому параметр выравнивания в этом случае не имеет значения.
Параметр знака действителен только для числовых типов и может быть одним из следующих:
Параметр | Значение |
|---|---|
| указывает на то, что знак должен использоваться как для положительных, так и для отрицательных чисел. |
| указывает на то, что знак должен использоваться только для отрицательных чисел (это поведение по умолчанию). |
пробел | указывает на то, что для положительных чисел должен использоваться начальный пробел, а для отрицательных – знак минус. |
Параметр '#' вызывает использование «альтернативной формы» для преобразования. Альтернативная форма определяется по-разному для разных типов. Этот параметр действителен только для целочисленных, плавающих и комплексных типов. Для целых чисел при использовании двоичного, восьмеричного или шестнадцатеричного вывода этот параметр добавляет соответствующие префиксы '0b', '0o', '0x', или '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. Пример библиотеки, построенной на строках шаблонов для локализации, см. в пакете 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.9/library/string.html