匹配。如何获取找到的组的索引?

时间:2014-05-01 22:19:55

标签: java regex matcher

我有句子,我想在其中计算单词,halfPunctuation和endPunctuation。

命令“m.group()”将显示字符串结果。但是如何知道找到哪个组? 我可以使用“group null”的方法,但听起来不太好。

String input = "Some text! Some example text."
int wordCount=0;
int semiPunctuation=0;
int endPunctuation=0;

Pattern pattern = Pattern.compile( "([\\w]+) | ([,;:\\-\"\']) | ([!\\?\\.]+)" );
Matcher m = pattern.matcher(input);
while (m.find()) {

//  need more correct method
if(m.group(1)!=null) wordCount++;
if(m.group(2)!=null) semiPunctuation++;
if(m.group(3)!=null) endPunctuation++;

}

1 个答案:

答案 0 :(得分:1)

您可以使用named groups来捕获表达式

Pattern pattern = Pattern.compile( "(?<words>\\w+)|(?<semi>[,;:\\-\"'])|(?<end>[!?.])" );
Matcher m = pattern.matcher(input);
while (m.find()) {
    if (m.group("words") != null) {
        wordCount++;
    } 
  ...
}