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

2024-09-27 04:27:55 发布

您现在位置:Python中文网/ 问答频道 /正文

我想用Python编写一个RegEx,如果字符串中出现{{ expression }},它将把字符串改成{% print expression %}

{{ 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 }}'

Tags: orto字符串reabvartempregex
1条回答
网友
1楼 · 发布于 2024-09-27 04:27:55

您可以使用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)

相关问题 更多 >

    热门问题