Python 拆下未闭合的支架
如何删除未关闭的括号及其内容,如果它们已关闭块。例如:Python 拆下未闭合的支架,python,regex,string,brackets,Python,Regex,String,Brackets,如何删除未关闭的括号及其内容,如果它们已关闭块。例如: "(eaardf((eaar)(eaar" -> "eaardf((eaar)" 我这样做了,但我无法生成正确的正则表达式: import re str1 = '(eaardf((eaar)(eaar' p = re.compile(r'\([a-z)]*.*') p.sub('', str1) >>> '' 请帮忙 简短回答:不能使用Python正则表达式 关于这一点,道文的评论已经给出了非常详细的解释 中等回
"(eaardf((eaar)(eaar" -> "eaardf((eaar)"
我这样做了,但我无法生成正确的正则表达式:
import re
str1 = '(eaardf((eaar)(eaar'
p = re.compile(r'\([a-z)]*.*')
p.sub('', str1)
>>> ''
请帮忙 简短回答:不能使用Python正则表达式 关于这一点,道文的评论已经给出了非常详细的解释
中等回答:标准的
re
模块无法处理递归模式,但Pypi中有一个模块声称能够::递归和重复模式是受支持的。-注意未经测试,因为当事情对于re来说过于复杂时,我倾向于最终构建一个专用的解析器,通过它是旧lex+yacc的Python实现。您期望的输出是不正确的(如果我理解正确),“eaardf((eaar)”仍然有未闭合的括号。需要“eaardf((eaar)”from“(eaardf((eaar)(eaar)”吗.为什么?逻辑是什么?第一个“(”未关闭。您能更具体地说明规则吗?可能重复(提示答案为否)。这可以用“堆栈”IMO实现。我将尝试用堆栈解决。