Из питона Документы :
Расширенное использование: вы можете получить
подклассы шаблона для настройки
синтаксис заполнителя, разделитель
персонаж, или весь обычный
выражение используется для разбора шаблона
строки. Для этого вы можете переопределить
эти атрибуты класса:
delimiter - это буквенная строка, описывающая заполнитель
вводя разделитель. По умолчанию
значение $. Обратите внимание, что это не должно быть
регулярное выражение, как
реализация вызовет re.escape ()
по мере необходимости.
idpattern - это регулярное выражение, описывающее шаблон для
несвязанные заполнители (фигурные скобки
будет добавлен автоматически как
подходящее). Значением по умолчанию является
регулярное выражение [_a-z] [_ a-z0-9] *.
Пример:
from string import Template
class MyTemplate(Template):
delimiter = '#'
idpattern = r'[a-z][_a-z0-9]*'
>>> s = MyTemplate('#who likes $what')
>>> s.substitute(who='tim', what='kung pao')
'tim likes $what'
В питоне 3:
Новое в версии 3.2.
В качестве альтернативы, вы можете предоставить весь шаблон регулярного выражения
переопределив шаблон атрибута класса. Если вы сделаете это, значение
должен быть объектом регулярного выражения с четырьмя именованными группами захвата.
Группы захвата соответствуют приведенным выше правилам вместе с
недопустимое правило заполнителя:
- escaped - эта группа соответствует escape-последовательности, например, $$, в шаблоне по умолчанию.
- named - эта группа соответствует свободному имени заполнителя; он не должен включать разделитель в группу захвата.
- в скобках - эта группа соответствует имени заполнителя в скобках; он не должен включать ни разделитель, ни фигурные скобки в захвате
группа.
- недействителен - эта группа соответствует любому другому шаблону разделителя (обычно один разделитель), и он должен появляться последним в регулярном
выражение.
* * Пример 1 042:
from string import Template
import re
class TemplateClone(Template):
delimiter = '$'
pattern = r'''
\$(?:
(?P<escaped>\$) | # Escape sequence of two delimiters
(?P<named>[_a-z][_a-z0-9]*) | # delimiter and a Python identifier
{(?P<braced>[_a-z][_a-z0-9]*)} | # delimiter and a braced identifier
(?P<invalid>) # Other ill-formed delimiter exprs
)
'''
class TemplateAlternative(Template):
delimiter = '[-'
pattern = r'''
\[-(?:
(?P<escaped>-) | # Expression [-- will become [-
(?P<named>[^\[\]\n-]+)-\] | # -, [, ], and \n can't be used in names
\b\B(?P<braced>) | # Braced names disabled
(?P<invalid>) #
)
'''
>>> t = TemplateClone("$hi sir")
>>> t.substitute({"hi": "hello"})
'hello sir'
>>> ta = TemplateAlternative("[-hi-] sir")
>>> ta.substitute({"hi": "have a nice day"})
'have a nice day sir'
>>> ta = TemplateAlternative("[--[-hi-]-]")
>>> ta.substitute({"hi": "have a nice day"})
'[-have a nice day-]'
По-видимому, также можно просто опустить любую из групп регулярных выражений escaped
, named
, braced
или invalid
, чтобы отключить ее.