蟒蛇。如何删除字符串中的冗余/错误括号

时间:2017-03-17 14:45:17

标签: python regex syntax-checking

例如输入字符串:

s = "fo)o)fus()(bar((em)ro(em))dah((y(XXX)"

结果我期待:

fus()((em)ro(em))dah(XXX)

结果应该包含所有"健康"块已打开"("和关闭")" +"健康"他们之间的文字。应移除所有生病的部位:" fo)"和" o)"因为他们没有参与"()"他们不在"()"或者不包含在"()"

另一个检查示例:

z = "))(OMG)123(()qwe(zxc)(ll"

应该回来 (OMG)123()qwe(zxc)

我希望它可以像re模块一样解析为常规脚本。但我不知道应该使用哪种算法。

PS:我不会拒绝任何帮助。 :)

1 个答案:

答案 0 :(得分:1)

使用堆栈有很好的例子,几乎每个CS学生至少解决了一次。以this为例,您可以找到更好的语法(专为C ++编写)。

这些解决方案通常用于检查语句是否正确,但您可以使用相同的逻辑删除错误的部分并仅保存匹配的部分。因此,只需创建新的字符串变量(variable=""),迭代字符串并检查括号,如果它们在正确的位置,则将它们添加到该变量。要检查括号顺序,请使用Stack对象,当您看到打开括号将其推送到堆栈然后继续,当它将关闭一个时,然后从堆栈中弹出最后一个值并检查(新项目为)并且堆栈中的最后一项应为()。如果他们不匹配,扔掉那部分并继续,如果匹配则将该部分添加到字符串。