我对regex有一定的经验,但是我不知道以下几点。如果我有一个像这样的字符串:

'[[1,2,3],[3,5,3],[9,8,9]] aoeu [5,6,9] aoeu [[4,5,5]]'

哪种正则表达式模式将分别提取[[1,2,3],[3,5,3],[9,8,9]][[4,5,5]]? (封闭双括号内的任何组)。显然,'\[\[.*\]\]'过于贪婪……

最佳答案

如果输入完全符合您的模式,则可以使用它来创建regex non-greedy

p = re.compile(ur'\[\[.*?\]\]')
test_str = u"[[1,2,3],[3,5,3],[9,8,9]] aoeu [5,6,9] aoeu [[4,5,5]]"
print(re.findall(p, test_str))


要处理[[1,2,3],[3,5,3],3][1,2,3,[3,5,3],3]等情况,请使用此正则表达式

(\[[^\[\]]*\[.*?\][^\]\[]*\])


REGEX DEMO

IDEONE DEMO

09-12 10:53