我想在 Python 中编写一个 RegEx,如果 {{ expression }}
出现在字符串中,它将更改字符串,变成 {% print expression %}
like
{{ a+b }}
to
{% print a+b %}
或
{{ func() }}
to
{% print func() %}
但如果它包含如下变量则不会更改:
{{ var }} or {{ var.attr }}
我试过这个:
pattern = re.compile( r'{{(?=(?:(?!{{)(?!\w([.]\w)*).*([()][+-/*%]\w)*)*}})')
temp_str = pattern.sub('{% print ', "{{ a }} {{ func() }} {{var.func()}} {{ a+ab+b*+2/100 }} {{ var.atr }} ")
输出:
'{% print a }} {% print func() }} {{ var.func()}} {% print a+ab+b*+2/100 }} {% print var.atr }}'
注意:在右大括号上 `} 我必须工作。
我期望的输出是:
'{{ a }} {% print func() }} {% print var.func()}} {% print a+ab+b*+2/100 }} {{ var.atr }}'
最佳答案
您可以使用 re.sub
中的函数捕获所有 {{<something>}}
的方法标签,然后分别处理每个标签:
import re
data = "{{ a }} {{ func() }} {{var.func()}} {{ a+ab+b*+2/100 }} {{ var.atr}} "
def substitute(val):
content = val.group(1)
if re.match('^[\w\.]+$', content):
return "{{ %s }}" % content
else:
return "{%% print %s %%}" % content
pass
print re.sub("{{\s*(.*?)\s*}}", substitute, data)
关于python - RegEx Python - 我想编写 RegEx,通过它我可以将 { expression } 替换为 {% print expression %},我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34014783/