如何使用Java中的正则表达式提取具有未知顺序的命名组?

时间:2017-03-29 13:42:32

标签: java regex regex-group

我想说我想从可能包含一两个字符串的字符串中提取foo\d{2}bar\d{2}作为命名组(例如,foobar)它们的任何顺序,例如:

hello foo33 world bar12
bar66 something foo14
this one only has bar45
this one has neither

有没有办法在Java中使用单个正则表达式?

最好将解决方案推广到3个以上的命名组。

2 个答案:

答案 0 :(得分:1)

您可以使用(foo|bar)\\d{2}for方法获取所有必需的值

find匹配(foo|bar)\\d{2}

  • foo:或|bar

  • bar:正好匹配2位

代码

\\d{2}

输出:

    String s="hello foo33 world bar12\n"+
            "bar66 something foo14\n"+
            "this one only has bar45\n"+
            "this one has neither";
    Pattern pattern = Pattern.compile("(foo|bar)\\d{2}");
    Matcher matcher = pattern.matcher(s);
    while (matcher.find()) {
        System.out.println(matcher.group());
    }

答案 1 :(得分:1)

这可以使用正则表达式或运算符来完成:|

在这种情况下,您要查找foo bar。所以你需要做的就是用或operator 对它们进行分组。

(foo|bar)\\d{2}

Here's an example on regexer!