【发布时间】:2016-06-07 13:13:48
【问题描述】:
我在处理这个问题时遇到了一些困难。我需要删除波浪括号中包含的所有数据。
像这样:
Hello {{world of the {{ crazy}} {{need {{ be}}}} sea }} there.
变成:
Hello there.
这是我的第一次尝试(我知道这很糟糕):
while 1:
firstStartBracket = text.find('{{')
if (firstStartBracket == -1):
break;
firstEndBracket = text.find('}}')
if (firstEndBracket == -1):
break;
secondStartBracket = text.find('{{',firstStartBracket+2);
lastEndBracket = firstEndBracket;
if (secondStartBracket == -1 or secondStartBracket > firstEndBracket):
text = text[:firstStartBracket] + text[lastEndBracket+2:];
continue;
innerBrackets = 2;
position = secondStartBracket;
while innerBrackets:
print innerBrackets;
#everytime we find a next start bracket before the ending add 1 to inner brackets else remove 1
nextEndBracket = text.find('}}',position+2);
nextStartBracket = text.find('{{',position+2);
if (nextStartBracket != -1 and nextStartBracket < nextEndBracket):
innerBrackets += 1;
position = nextStartBracket;
# print text[position-2:position+4];
else:
innerBrackets -= 1;
position = nextEndBracket;
# print text[position-2:position+4];
# print nextStartBracket
# print lastEndBracket
lastEndBracket = nextEndBracket;
print 'pos',position;
text = text[:firstStartBracket] + text[lastEndBracket+2:];
它似乎可以工作,但很快就会耗尽内存。有没有更好的方法来做到这一点(希望使用正则表达式)?
编辑:我不清楚,所以我再举一个例子。我需要允许多个顶级括号。
像这样:
Hello {{world of the {{ crazy}} {{need {{ be}}}} sea }} there {{my }} friend.
变成:
Hello there friend.
【问题讨论】:
-
所以基本上你想删除 {} 中的所有内容,对吧?
-
但是,如果您不想使用
regex使用堆栈来计算开括号和右括号的数量,它比这里的示例代码更容易。 -
@GLHF 不,它必须在 {{ }} 而不仅仅是 { }