捕获所有内容,直到使用命名组的特定字符

时间:2013-10-27 01:27:23

标签: java regex

我正在尝试编写一个正则表达式,它将捕获所有内容,直到点或逗号,并且我正在使用命名组来执行此操作。

这就是我所拥有的:

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"));
}

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

2 个答案:

答案 0 :(得分: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"));
}

[^ ,.]表示以非空格,逗号或句点字符开头 [^,.]*表示任意数量的非逗号或句号字符 (?=(,|\\.))是逗号或句号的正面预测,必须对其进行转义,因为正则表达式中的.是一个特殊字符,表示“除了换行符之外的任何内容”

你的工作不起作用,因为在你积极展望之前你什么都没有。

答案 1 :(得分: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());
    }