使用Python搜索字符串

时间:2013-11-04 16:50:13

标签: python

我有以下句子:

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

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

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

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

2 个答案:

答案 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. jinja
  2. cheetah
  3. Templating
  4. bottlepy
  5. 祝你好运!

答案 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条件并删除类似的数据