使用Python,我需要解析具有以下结构的文件:
((Lorem) ipsum dolor sit amet)
(consectetur adipiscing elit.)(Etiam
suscipit
pulvinar congue.)
((Vivamus) eu faucibus enim.)
结果必须是括号内所有内容的列表,即
[
'(Lorem) ipsum dolor sit amet',
'consectetur adipiscing elit.',
'Etiam\nsuscipit\npulvinar congue.',
'(Vivamus) eu faucibus enim.'
]
由于括号可以嵌套,也许正则表达式不是我正在寻找的工具。
任何提示?
答案 0 :(得分:3)
您可以使用递归正则表达式执行此操作:
\(((?:[^()]|(?R))*)\)
这几乎完全(除了添加的捕获组),recursive patterns on regular-expressions.info
的真实示例Test it on regex101.com。它完全返回您的示例输出。
要实现递归正则表达式,请查看此问题的答案:How can a recursive regexp be implemented in python?
答案 1 :(得分:0)
我想我会自己编码。我远离蟒蛇专家,所以也许我的解决方案不是正常的python方式。最初将计数器设置为0.然后通过char逐步执行字符串char。如果当前字符等于'('将计数器增加1。如果它等于')'减少它。如果您的计数器在减少后为0,则您有下一个列表条目。如果您的计数器低于零,则表示您有错误。就像下一个列表条目不是以'开头一样('。但这取决于你想要的东西。这应该很容易实现。
答案 2 :(得分:0)
您需要的只是一个堆栈来实现这一点。 的 ALGO 强>
或者你可以反过来(从开头解析字符串并推送除开放括号以外的所有内容)
如需参考,请查看此帖子interactivepython.org/runestone/static/pythonds/BasicaDS/InfixPrefixandPostfixExpressions.html
Postfix前缀方法通常用于评估表达式。