【发布时间】:2014-08-02 03:38:47
【问题描述】:
我想匹配 last 组,该组包含在 [] 中,但在嵌套结构中可能包含多个 [] 中的一个。
我设法使用 python 的 regex 进行嵌套的 [] 匹配,虽然并不优雅。此解决方案适用于某些情况(例如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 ]]'
【问题讨论】:
-
您实际上可以通过前瞻/后视来完成此操作,但是在这种情况下,我可能会使用堆栈/解析器。
-
@Vlad,他有一个嵌套结构。这可能就是他在这里使用递归正则表达式的原因,我不确定单独环顾四周是否可行,但如果我错了,请纠正我。欢迎来到 SO,OP!
-
你想要什么输出?
-
[[aaa] xxx [yyy [zzz ]]是一种可能的情况吗?即不同层次的嵌套结构的混合。 -
仅供参考添加了经过测试的 Python 代码。 :)
标签: python regex python-2.7