- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我在解决这个问题时遇到了一些困难。我需要删除波浪括号中包含的所有数据。
像这样:
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.
最佳答案
这是一个基于正则表达式/生成器的解决方案,适用于任意数量的大括号。这个问题不需要实际的堆栈,因为只涉及一种类型(好吧,一对)的 token 。 level
扮演堆栈将扮演更复杂的解析器的角色。
import re
def _parts_outside_braces(text):
level = 0
for part in re.split(r'(\{\{|\}\})', text):
if part == '{{':
level += 1
elif part == '}}':
level = level - 1 if level else 0
elif level == 0:
yield part
x = 'Hello {{world of the {{ crazy}} {{need {{ be}}}} sea }} there. {{ second set {{ of }} braces }}'
print(''.join(_parts_outside_braces(x)))
更一般的要点...正则表达式中的捕获组是使大括号出现在 re.split
输出中的原因,否则你只会得到介于两者之间的东西。也有一些对不匹配的括号的支持。对于严格的解析器,这应该引发异常,因为应该在级别 > 0 的字符串末尾运行。对于松散的 Web 浏览器样式解析器,也许您想要显示那些 }}
作为输出...
关于python - 在python中删除带有嵌套子括号的双波浪括号之间的数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35615847/
我目前正在开发一个具有模块化设计的网站,其中包含文本模块、图像模块、2 列模块......用户可以根据需要添加/删除/重新排序它们。 每个模块都有一个波浪形/flex 的边框: 有没有可能用css做这
我正在尝试在网站上创建波浪效果 like this其中有一个主色波(深紫色),然后是沿边缘的浅色波。我已尝试使用 CSS position 和 top 定位多个路径,但无法使它们工作。 这是我的基本波
如何在透明图像背景上构建波浪? 布局图像: 我需要白色顶部背景中的波浪。 最佳答案 我稍微改进了 akshay 的回答版本。这包括两个单独的选项。 选项 1 如果不需要保留宽高比,则曲线将随宽度变化。
我是一名优秀的程序员,十分优秀!