【发布时间】:2016-11-07 18:47:30
【问题描述】:
假设我得到以下类型的字符串:
"(this is (haha) a string(()and it's sneaky)) ipsom (lorem) bla"
我想提取包含在括号的最顶层中的子字符串。 IE。我要获取字符串:"this is (haha) a string(()and it's sneaky)" 和"lorem"。
有没有很好的pythonic方法来做到这一点?正则表达式显然可以胜任这项任务,但也许有办法让 xml 解析器完成这项工作?对于我的应用程序,我可以假设括号格式正确,即不是像 (()(() 这样的东西。
【问题讨论】:
-
我认为你应该为此定义一个函数。在该函数中,遍历字符串并维护一个标志以检查您是否在括号的最顶层。使用此方法,您可以获得开始和结束的索引,然后您可以提取字符串并连接到最终答案
-
这会被视为“pythonic”方法吗?我会通过使用 ctr 来解决它,它会在点击“(”时增加,在点击“)”时减少。当它在达到至少 1 个 '(' 后达到 0 时,您可以将初始位置和最终位置之间的子字符串附加到列表中。
-
嗨 utkarsh13。感谢那。这或多或少是我想到的解决方案,但我想知道是否有更快的内置在 python 中的一些功能,可以在几行易于阅读的行中完成。
-
@user177955 又快又脏:
print re.match(string.replace(")",").").replace("(",".("), string).groups()[0::4]。抱歉,我无法抗拒:这个字符串看起来太像一个正则表达式,我把它变成了一个正则表达式。 :P 话虽如此,您应该真正编写自己的堆栈或遵循 utkarsh 所说的内容。 -
@SuperSaiyan 当然,对于任何字符串,都存在一个任意复杂的 RE 可以完成这项工作:-P
标签: python string xml-parsing parentheses