python - RegEx Python - 我想编写 RegEx,通过它我可以将 { expression } 替换为 {% print expression %}

标签 python regex

我想在 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/

相关文章:

mysql - 选择查询中的 find_in_set 和正则表达式

Python sklearn.mixture.GMM 不适合扩展吗?

python - 如何告诉 Googletrans 忽略某些部分?

java - 正则表达式匹配问题

php - 如何检查字符串中是否只有一个 "@"字符?

php - 在 wordpress 中返回 true 和 false 的 Ajax 函数问题

python - 从文本中提取年龄值以在 pandas 中创建新列

python - 有没有办法使用 boto 将名称标签添加到创建的快照?

python - 使用 csv 文件从元组到整数

python - Fabric "TypeError: not all arguments converted during string formatting"