捕获以分号分隔的字符串的组缺少最后一个组

时间:2013-09-10 10:33:03

标签: java regex regex-group

我的输入字符串是

String input=" 4313 :F:7222;scott miles:F:7639;Henry Gile:G:3721";

这是一个带分号分隔符的字符串。它可以包含由分号

分隔的任意数量的值

我想在java中使用组捕获功能并捕获以下值(即:分隔符)

         4313 :F:7222
         scott miles:F:7639
         Henry Gile:G:3721

我知道我可以在Spring类下使用split函数,但出于某种原因我想在这里使用group capture。

我试过

Matcher myMatcher = Pattern.compile("(.*?);").matcher(input);
while (myMatcher.find()) {
    System.out.println("group is " + myMatcher.group());
}

输出

group is  4313 :F:7222;
group is scott miles:F:7639;

但预期输出

group is  4313 :F:7222
group is scott miles:F:7639
group is Henry Gile:G:3721

我没有得到如何捕获最后一个分号后的最后一个值,而且我想摆脱分号,正如我在预期的结果中提到的那样。

2 个答案:

答案 0 :(得分:5)

尝试使用正则表达式:

([^;]+)

这应该得到你需要的所有组。

regex101 demo

答案 1 :(得分:1)

你正在寻找以半圆形结束的小组。这就是为什么你的正则表达式只匹配两组而不是3组。 您可以使用寻找以不是半分号的每个符号开头的组的方法。

([^;]+)

或者您可以在解析输入字符串时使用半字符或行尾字符:

(.+?)(;|$)

这两种方法都给出了预期的结果。

P.S。对于第二个,您需要获得预期结果的第一组:

System.out.println("group is " + myMatcher.group(1));