非标准的,结构化的CSV - regexing结构

时间:2016-01-13 12:24:55

标签: java regex csv

我在以下惯例中有一个CSV

# This works
gen = (x for x in range(10))

def hello(*args):
    print args    
hello(*gen)

# but this does not work
[] + gen
TypeError: can only concatenate list (not "generator") to list

问题是当我尝试正则表达我得到的outerStructure1时:

val1,val2,outerStruct1{valA,valB,innerStruct2{valX, valY},valC},... 代替:

outerStruct1{valA,valB,innerStruct2{valX, valY}

显然它会在第一个outerStruct1{valA,valB,innerStruct2{valX, valY},valC}而不是最后一个(有效)返回。我目前的正则表达式是:

}

如何扩展它以达到合适的右支撑?

1 个答案:

答案 0 :(得分:3)

\{.*?\}(?=(?:[^{}]*|\{[^{}]*(?:\{[^{}]*\}[^{}]*)*\})*$)

See it in action

一般的想法是在匹配后检查,只有平衡的花括号保留直到字符串的末尾。

但请注意,此正则表达式不是递归的,并且不会处理大于2级的嵌套。