提取多层括号中最外层括号包含的内容有几种方式,那么用正则表达式该怎么实现呢?
在python中,用正则表达式提取多层括号中最外层括号包含的内容比如有一个字符串 :
CPU(
.CPU_1(f1),
.CPU0(t0),
.CPU1(t1),
.CPU2(t2),
.CPU3(t3)
);
我想要提取
.CPU_1(f1), .CPU0(t0), .CPU1(t1), .CPU2(t2), .CPU3(t3)
这些内容,那么如何实现呢?
还有的一种情况是对于
a(bc(d)ef)g(h(i)(j)k)这段字符串要提取出
bc(d)ef 和 h(i)(j)k 两个字串,所以不能用贪婪匹配。
用栈可以实现,但想知道有没有用正则表达式更方便的办法。
问题分析
不规则嵌套结构的分析
最好还是用栈
如果已经确定嵌套的结构
才可以考虑使用正则
先用贪婪取出整体的数据
然后对数据规划出相似的结构
第一个很简单就不用说了
第二个可以写成这样
(?: # 相似结构的分组
\w* # 括号前可能存在的内容
\( # 左括号
[^()]+ # 非括号内容
\) # 右括号
)+ # 多个相似的结构
\w* # 剩余的没有括号的内容
需要注意的是正则在这样的条件下可用性并不高
因为嵌套结构如果改变了
就得修改或重新编写
唯一能通用的是递归结构(比如回文)
但正则的递归用法也只有PHP等少数语言支持
所以在Python中还是自己写算法好一点
注:我这有个学习Python基地,里面有很多学习资料,感兴趣的+Q群:895817687
网友评论