字符串看起来像这样“[xx],[xx],[xx]” 其中xx是像这样的ploygon“(1.0,2.3),(2.0,3)......
基本上,我们正在寻找一种方法,将每对方括号之间的字符串转换为数组。
E.g。 String source =“[hello],[1,2],[(1,2),(2,4)]”
将导致一个对象a:
a[0] == 'hello'
a[1] == '1,2'
a[2] == '(1,2),(2,4)'
我们尝试了各种策略,包括使用groovy正则表达式:
def p = "[12],[34]"
def points = p =~ /(\[([^\[]*)\])*/
println points[0][2] // yields 12
然而,这会产生以下2个暗淡的数组:
[[12], [12], 12]
[, null, null]
[[34], [34], 34]
所以,如果我们从每个偶数行中取出第3个项目,我们就可以了,但这看起来非常正确。我们没有考虑','我们不确定为什么我们两次得到“[12]”,它应该是零次?
那里有任何正则表达式专家吗?
答案 0 :(得分:1)
我认为这就是你要找的东西:
def p = "[hello],[1,2],[(1,2),(2,4)]"
def points = p.findAll(/\[(.*?)\]/){match, group -> group }
println points[0]
println points[1]
println points[2]
此脚本打印:
hello
1,2
(1,2),(2,4)
关键是使用.*?
使表达式非贪婪,以找到字符[]
之间的最小值,以避免第一个[
与上一个{{1}匹配在} ]
匹配中生成匹配...然后使用hello],[1,2],[(1,2),(2,4)
只返回捕获的组。
希望它有所帮助,