1

我正在尝试编写一个正则表达式,它将捕获直到点或逗号为止的所有内容,并且我正在使用命名组来做到这一点。

这是我所拥有的:

String pattern = "(?<Words>(?=,|.))";
String text = "Part one, part two. Part three";
Matcher m = Pattern.compile(pattern).matcher(text);
while (m.find()) {
    System.out.println(m.group("Words"));
}

我想捕捉“第一部分”,因为它是第一个逗号之前的所有内容。然后捕获所有内容,直到第一个点,即“第二部分”。我的代码中的正则表达式似乎不起作用,它什么也没输出,我不确定我在这里缺少什么。

4

2 回答 2

1

如果您想调整代码以使其正常工作,请执行以下操作:

String pattern = "(?<Words>[^ ,.][^,.]*(?=(,|\\.)))";
String text = "Part one, part two. Part three";
Matcher m = Pattern.compile(pattern).matcher(text);
while (m.find()) {
    System.out.println(m.group("Words"));
}

[^ ,.]表示以非空格、逗号或句点字符开头
[^,.]*表示任何数量的非逗号或句点字符
(?=(,|\\.))都是逗号或句点的正向前瞻,必须对其进行转义,因为.在正则表达式中是一个特殊字符,表示“除换行符”

你的行不通,因为在你积极向前看之前你一无所有。

于 2013-10-27T03:30:26.357 回答
0

在这里使用方法怎么样String.split

    String pattern = "[,|\\.]";
    String text = "Part one, part two. Part three";
    String[] strsBySplit = text.split(pattern);
    for (String s : strsBySplit) {
        System.out.println(s.trim());
    }
于 2013-10-27T02:30:59.680 回答