內屬性我有一個正則表達式,這將{{ expression }}
轉換成{% print expression %}
時表達{{ function() }}
或{{ object.function() }}
或類似{{ a+b }}
算術運算,但不會轉換時,它會得到{{ var }}
或{{ object.attribute }}
。正則表達式來排除串並表達
用正則表達式我的問題是轉換字符串表達式{{ "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「string」%} {%print「{{var}}」%%{} print {%printf {%} {%print object.function()%} {%print a + b% } {%print 「function()」%} {%p RINT 「A + B」 %} '
我想要的輸出是:
'{{VAR}} {{object.var}} {%打印FUNC()%} { %print object.function()%} {%print a + b%} {{「string」}} {{「{{var}}」}} {{「function()」 }} {{「a + b」}}」
注:這裏的一個條件是在{{ }}
之間可以具有像字符串表達式表達即用雙引號或{{ 'string' }}
即用單引號。
據推測,這是因爲你在你的角色組使用'\ w'。你可以用'\「加雙引號,或者不要使用正則表達式,並且測試'」()「'是否在'val.group(1)'中(以及其他任何類似'+ - * /') – Evert
我不能僅僅檢查「()」,因爲我想轉換算術表達式,就像{{a + b}}一樣,如果我檢查「()」,它也會將表達式轉換爲{ {「function()」}}。我只想將{{function()}}或{{a + b}}表達式轉換爲{{「function()」}} {{「a + b」}} –
也許最直接的方法是爲周圍的(雙引號)或周圍的雙花括號添加案例,或者找到一個模板轉換器,它已經完成了你想要做的事情。 – Evert