1

我有以下句子:

Dave put the rubbish in the {{ if dave_good }}bin{{ else }}street{{ endif }}.

我目前正在通过捕获[[ something ]]整个实例并将其替换为一个值(不是问题)来替换文本字符串中的变量。但那是使用python的re库。

我想知道是否有人可以告诉我如何:

  1. {{ if dave_good }}在字符串中搜索单个实例
  2. 从 向前计数{{ if dave_good }}以确保{{ endif }}在字符串结尾之前有 a
  3. 如果没有{{ else }}则删除标签,或标签及其内容,(在它们在文本中的位置)基于布尔属性dave_good
  4. 如果有一个{{ else }}
    1. 如果dave_goodTRUE然后删除{{ if dav_good }}{{ else }}street{{ endif}}
    2. 如果dave_goodFALSE然后删除{{ endif }}{{ if dave_good }}bin{{ else }}
4

2 回答 2

1

尝试使用正则表达式

例子:

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. 神社
  2. 猎豹
  3. 模板
  4. 瓶瓶罐罐

祝你好运!

于 2013-11-04T17:18:55.083 回答
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 条件并类似地删除数据

于 2013-11-04T18:09:35.657 回答