我有以下句子:
Dave put the rubbish in the {{ if dave_good }}bin{{ else }}street{{ endif }}.
我目前正在通过捕获[[ something ]]
并用值(不是问题)替换整个实例来替换文本字符串中的变量。但那是使用python的re
库。
我想知道是否有人可以告诉我如何:
{{ if dave_good }}
的单个实例
{{ if dave_good }}
向前计数以确保在字符串结尾之前有{{ endif }}
{{ else }}
,则根据dave_good
的布尔属性删除标记或标记及其内容(在文本中的位置) {{ else }}
dave_good
为TRUE
,则删除{{ if dav_good }}
和{{ else }}street{{ endif}}
dave_good
为FALSE
,则删除{{ endif }}
和{{ if dave_good }}bin{{ else }}
答案 0 :(得分:1)
尝试使用Regular Expressions。
示例:
import re
result = re.match("\{\{((if|else|endif).*?)\}\}","{{if 100 > 1}}",re.I)
print result.groups()
result = re.match("\{\{((if|else|endif).*?)\}\}","{{else}}",re.I)
print result.groups()
result = re.match("\{\{((if|else|endif).*?)\}\}","{{endif}}",re.I)
print result.groups()
或者使用python模板引擎
祝你好运!
答案 1 :(得分:1)
如果你想在python上只实现那个,那么这就是我写的东西
如果它是你要问的。
def process(string,dave_good):
ls=string.split(" ")
flag=0
flags=1
for i in range(0,len(ls)-1):
if ls[i]=='if' and ls[i+1]=='dave_good': #conditional if found.
flag=1
flags=1
break
flags=0
if(flag): #expects a whitespace after endif (if theres a period then remove the comments)
st=i
try:
end=ls.index('endif')
except:
flags=0
pass
# try:
# end=ls.index('endif.')
# except:
# print "no matching endif"
# flags=0
if(flags):# delete 'if','else','endif' and corresponding variables(bin/streets)
if dave_good:
del ls[st]
del ls[st]
del ls[st+1]
del ls[st+1]
del ls[st+1]
else:
del ls[st]
del ls[st]
del ls[st]
del ls[st]
del ls[st+1]
return " ".join(ls)#join back to a string
print process('Dave put the rubbish if in the if dave_good bin else street endif .',True)
print process('Dave put if else the rubbish in the if dave_good bin else street endif',False)
可能不是您正在寻找的东西,但它可以是一个好的开始
同样对于第三个条件,你可以检查else条件并删除类似的数据