python – 匹配最后一组(可能)嵌套括号
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了python – 匹配最后一组(可能)嵌套括号,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1854字,纯文字阅读大概需要3分钟。
内容图文
![python – 匹配最后一组(可能)嵌套括号](/upload/InfoBanner/zyjiaocheng/733/311b0519e42c44568e681c0e316f67e3.jpg)
我想匹配最后一个组,它包含在[]中,但在嵌套结构中可能包含其中一个[].
虽然不是很优雅,但我设法使用python的正则表达式进行嵌套[]匹配.当存在多个这样的匹配时,该解决方案适用于某些情况(例如s1)但不适用于s2或s3.我的解决方案只匹配第一个.
有什么建议?更好的正则表达式?或正则表达不是要走的路?非常感谢!
In [116]:
s1 = 'AAA [BBB [CCC]]'
s2 = 'AAA [DDD] [EEE]'
s3 = 'AAA [BBB [CCC]] [EEE]'
for s in [s1, s2, s3]:
result = regex.search(r'(?<rec>\[(?:[^\[\]]++|(?&rec))*\])',s,flags=regex.VERBOSE)
print(result.captures('rec'))
['[CCC]', '[BBB [CCC]]'] #I know it is perfect, but I can take the last one in the list
['[DDD]'] #This is the first one, I want the last one, which is [EEE]
['[CCC]', '[BBB [CCC]]'] #same problem as above
编辑:
非常感谢你的帮助,如果我有15个代表,我将全部投票.但是,抱歉不包括预期的结果,应该是:
'AAA [BBB [CCC]]' -> '[BBB [CCC]]'
'AAA [DDD] [EEE]' -> '[EEE]'
'AAA [BBB [CCC]] [EEE]' -> '[EEE]'
'000 [[aaa] xxx [yyy [zzz ]]' -> '[[aaa] xxx [yyy [zzz ]]'
解决方法:
在Python中,要使用递归或重复的子程序,我们需要使用Matthew Barnett出色的regex模块……而且,正如@CTZhu指出的那样,你已经在使用它了!
要明确条款,可以有几种对“嵌套”的理解,例如:
>简单嵌套,如[C [D [E] F]],它是…的子集
>更复杂的家庭式嵌套,如[B [C] [D] [E [F] [G]]].
你需要能够处理后者,这个简短的正则表达式为我们做了:
\[(?:[^[\]]++|(?R))*\]
这将匹配所有嵌套的大括号.现在我们需要做的就是打印最后一场比赛.
这是一些经过测试的Python代码:
import regex # say "yeah!" for Matthew Barnett
pattern = r'\[(?:[^[\]]++|(?R))*\]'
myregex = regex.compile(pattern)
# this outputs [EEE]
matches = myregex.findall('AAA [BBB [CCC]] [EEE]')
print (matches[-1])
# this outputs [C[D[E]F]] (simple nesting)
matches = myregex.findall('AAA [BBB] [C[D[E]F]]')
print (matches[-1])
# this outputs [B[C] [D] [E[F][G]]] (family-style nesting)
matches = myregex.findall('AAA [AAA] [B[]B[B]] [B[C] [D] [E[F][G]]]')
print (matches[-1])
内容总结
以上是互联网集市为您收集整理的python – 匹配最后一组(可能)嵌套括号全部内容,希望文章能够帮你解决python – 匹配最后一组(可能)嵌套括号所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。