groovy正则表达式,如何匹配字符串中的数组项

时间:2015-10-27 12:14:33

标签: regex groovy

字符串看起来像这样“[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]”,它应该是零次?

那里有任何正则表达式专家吗?

1 个答案:

答案 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)只返回捕获的组。

希望它有所帮助,