在简单的正则表达式中找不到匹配项

时间:2015-05-17 05:02:51

标签: java regex

给定格式" word_suffix"中的标记,我想匹配并捕获"后缀"部分。

例如,在" Peter_NNP"我想捕获" NNP"。我写道:

        String p="Peter_NNP";
        Matcher matcher=Pattern.compile(".+_(.*\\s)").matcher(p);
        System.out.println(matcher.group(1));

而非打印" NNP"正如我所料,它产生了以下例外:

Exception in thread "main" java.lang.IllegalStateException: No match found
at java.util.regex.Matcher.group(Unknown Source)

请注意"字"和"后缀"部分可以由任何字符组成。

2 个答案:

答案 0 :(得分:4)

您需要致电find()来抓住您的匹配组。此外,您的捕获组期望字符串末尾应该有空格,在#34; Peter_NNP"没有,.*就够了。

String s  = "Peter_NNP";
Pattern p = Pattern.compile(".+_(.*)");
Matcher m = p.matcher(s);
if (m.find()) {
  System.out.println(m.group(1)); //=> "NNP"
}

但是,我认为这里可以进行简单的拆分:

String s = "Peter_NNP";
String[] parts = s.split("_");
System.out.println(parts[1]);    //=> "NNP"

答案 1 :(得分:1)

添加hwnd回答,如果你想在第一个下划线后捕获任何东西(即使下划线之前没有字符)。感谢hwnd让我理解这一点。

            String s="_NNP";
            Matcher matcher=Pattern.compile(".*?_(.*)").matcher(s);
            while (matcher.find()) {
                System.out.println(matcher.group(1));
              }