需要这个正则表达式的嵌套括号

时间:2013-02-05 17:17:55

标签: java regex shell

我有三列这样的数据集

  

Col1,Col2,Col2

     

aaa,Arizona DL USTATES,12

     

bbb,Idaho DL USTATES,35

     

ccc,Idaho DL USTATES,28

     

ddd,Wisconsin DL USTATES,11

      eeee,Wisconsin DL USTATES,35

我想要做的是我想要提取第二列的第一个单词(什么是州名)并将其放在第一列。

  

预期产出:

     

亚利桑那州,亚利桑那州兰达,USTATES,12

     

Idaho,Idaho randam USTATES,35

     

Idaho,Idaho randam USTATES,28

     

威斯康星州威斯康星州随机的USTATES,11

我的正则表达式是

  

^ [^,] +,([^] +)[^ \ n] + $

使用my()我可以提取状态名称,但是如何获取输出?我想要的是嵌套的括号,类似这样的

  

^ [^,] +,(([^] +)[^ \ n] +)$

然后输出将是 \ 1,\ 2

我应该指出,我只想使用正则表达式替换它。

编辑:

我已经通过使用正则表达式获取列中的所有状态名称然后合并它来解决它,但我想知道是否有任何高级正则表达式可以在这里使用。

2 个答案:

答案 0 :(得分:2)

String s = "aaa,Arizona DL USTATES,12";

String st = s.split(",")[1].split(" ")[0];
s = s.replaceFirst("\\w+\\,", st + ",");

答案 1 :(得分:1)

使用嵌套括号的正则表达式可以正常工作;您只需要使用String的{​​{1}}方法,并注意Java使用replaceFirst进行组引用。另请注意,这些组按照它们在正则表达式中的顺序进行枚举,因此外部组为$,因为它首先启动:

$1