подстановка шаблона строки: каждое вхождение должно быть заменено - PullRequest
0 голосов
/ 02 мая 2018

У меня есть следующие MWE:

import string

class MyTemplate(string.Template):
   delimiter = '$'
   pattern = r'''
   \$(?:
   (?P<escaped>\$)|
   (?P<named>[_a-z][_a-z0-9]*)\$|
   (?P<braced>[_a-z][_a-z0-9]*)\$|
   (?P<invalid>)
   )
   '''
data1="max=$max$ min=$min$"
data2="max=$max$ "
print MyTemplate(data1).substitute({"max":"10","min":"1"})
print MyTemplate(data2).substitute({"max":"10","min":"1"})
print MyTemplate(data1).substitute({"max":"10"})

Из 3 отпечатков я хочу, чтобы единственным приемлемым случаем был первый; последний вызывает исключение, а второй просто пишет:

max=10 
  1. Как я могу обнаружить этот случай (больше значений, чем заполнитель)?
  2. Можно ли проверить, что значение подставляется только один раз?

Спасибо!

1 Ответ

0 голосов
/ 02 мая 2018

Реальные вопросы здесь: «Чего вы пытаетесь достичь?» и "это нужно?" и "зачем это нужно?"

Если он вам все еще нужен после ответа на все это, переопределите substitute в вашем классе MyTemplate. Вы сможете делать любые проверки, которые вам нравятся. Однако это может замедлить вашу программу.

С другой стороны, string.Template (из python 2.6) в основном используется через mystr.format(). А потом заменить на f-strings (3.6) https://www.python.org/dev/peps/pep-0498/

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...