正则表达式,不包括匹配的部分

时间:2017-02-05 16:12:30

标签: java regex

是否有可能检查匹配(顺便说一下是可选的)但是不将它包含在结果组中?

示例:

文本:94km SSE of Taron, Papua New Guinea
正则表达式:^[.*\sof]?(.*)$

然后m.group()返回整场比赛,但我只想"巴布亚新几内亚"

我已经尝试过了:

^(?:*\sof)?(.*)$ 

但没有积极的结果。

提前感谢。

4 个答案:

答案 0 :(得分:2)

你的正则表达式有效:

Taron, Papua New Guinea

输出:

m.group()

请注意m.group(1)会返回整个匹配项。要使第一组使用C#

答案 1 :(得分:1)

尝试使用正面lookbehind

    Pattern p = Pattern.compile("(?<=\\bof\\b)(.*)");
    Matcher m = p.matcher("94km SSE of Taron, Papua New Guinea");
    if (m.find()) {
        System.out.println(m.group());
    }

产地:

 Taron, Papua New Guinea

答案 2 :(得分:0)

实际上,你不能(或不应该)获得匹配部分之外的任何东西。所以,你只需要将它包含在regexp中。我认为这会奏效:

    Pattern pattern=Pattern.compile("(.*\\sof\\s.*,\\s)?(.*)");
    Matcher matcher;
    matcher=pattern.matcher(text);
    return matcher.group(2);

注意:我想你要设置&#34;&#34;作为分隔符,但你做错了:这个正则表达式:

^[.*\sof]

表示&#34;任何不是空白的字符,或者&#39; o&#39;或者是&#39; f&#39;或任何其他。在[abcd]区间内,字符意味着失去了它们的顺序。

答案 3 :(得分:0)

根据巴布亚新几内亚的要求&#34;使用正则表达式\w[^,]+$.*

String str = "94km SSE of Taron, Papua New Guinea";

Pattern pattern = Pattern.compile("\\w[^,]+$.*");
Matcher matcher = pattern.matcher(str);

System.out.println(matcher.find()?matcher.group():"Not Found");