给定格式" 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)
请注意"字"和"后缀"部分可以由任何字符组成。
答案 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));
}