У меня есть регулярное выражение, которое будет преобразовывать {{ expression }}
в {% print expression %}
когда выражение {{ function() }}
или {{ object.function() }}
или арифметическая операция, как {{ a+b }}
, но не будет конвертировать, когда он получит {{ var }}
или {{ object.attribute }}
.Regex исключить строку атрибутов и в выражении
Проблема с регулярным выражением у меня есть, это преобразовать строковое выражение {{ "string" }}
или {{ "function()" }}
или {{ "{{ var}}" }}
в {% print "string" %}
или {% print "function()" %}
или {% print "{% print var %}" %}
import re
def replacement(val):
content = val.group(1)
if re.match('^\s*[\w\.]+\s*$', content):
return "{{%s}}" % content
else:
return "{%% print %s %%}" % content
string_obj = """{{ var }} {{ object.var }} {{ func()}} {{ object.function() }} {{ a+b }} {{ "string" }} {{ "{{ var }}" }} {{ "function()" }} {{ "a+b" }}"""
print(re.sub("{{(\s*.*?\s*)}}", replacement, string_obj))
Выход:
«{{вар}} {{объект .var}} {% print func()%} {% print object.function()%} {% print a + b%} {% print "строка"%} {% print "{{var}}"% } {% print "function()"%} {% p ечать "а + Ь" %} '
Вывод, что я хочу это:
' {{вар}} {{object.var}} {% распечатать FUNC()%} { % print object.function()%} {% print a + b%} {{"string"}} {{"{{var}}"}} {{"function()" }} {{a + Ь»}}»
Примечание: Единственное условие здесь выражение между {{ }}
может иметь строковое выражение как {{ "string" }}
, т. Е. С двойными кавычками или {{ 'string' }}
т. Е. С одинарными кавычками.
Предположительно, это происходит потому, что вы используете '\ w' в группе символов. Вы можете либо добавить двойные кавычки туда с '\" ', либо не использовать регулярное выражение и проверить, является ли' '()" 'в' val.group (1) '(и что-нибудь еще, как' + - */'). – Evert
Я не могу проверить только«() », потому что я хочу преобразовать арифметическое выражение также как {{a + b}}, и если я проверю«() », он также преобразует выражение, подобное { {"function()"}} Я хочу только преобразовать {{function()}} или {{a + b}} не выражение, как {{"function()"}} {{"a + b"}} –
Возможно, самый простой способ - добавить случаи для окружающих (двойных) котировок или близких двойных фигурных скобок. Или найти конвертер шаблонов, который уже делает то, что вы пытаетесь сделать. – Evert