Java regex在第一个匹配模式后返回

时间:2012-06-30 11:07:45

标签: java

我想在以下字符串中首先'from'后提取单词 -

  

来自Chemicon的抗CD24和来自Santa的抗CD48

现在,我正在使用 -

  

“从\ S +([^ \ S] +)”

但它同时给出“Chemicon”和“Santa”的结果,而不仅仅是'Chemicon'。

2 个答案:

答案 0 :(得分:1)

也许你可以这样做:

    Pattern p = Pattern.compile("from\\s+([^\\s]+)");
    Matcher m = p.matcher("anti-CD24 from Chemicon, and anti-CD48 from Santa");
    if (m.find()) {
        System.out.println(m.group(1));
    }

这只需要第一个。也许你可以使用这个正则表达式来避免第一场比赛的逗号(Chemicon,):from\\s+([a-zA-Z]+)

答案 1 :(得分:0)

您可以在Method对象上使用lookingAt方法。它在找到第一场比赛后停止。

matches函数类似,与find函数lookingAt不同,从头开始匹配,因此我们必须使用正则表达式".*?from\\s+(\\w+)",其中包含:匹配任何内容直到第一个“从”,然后是一个或多个空白字符,然后是下一个“字”。如果您只希望字母字符匹配“from”后的单词,请使用".*?from\\s+([a-zA-Z])"。开头的".*?"表示非贪婪的匹配。如果您只使用".*",它将匹配最后一个“来自”,而不是第一个。

这是我测试过的代码:

  String s = "anti-CD24 from Chemicon, and anti-CD48 from Santa";
  Matcher m = Pattern.compile(".*?from\\s+(\\w+)").matcher(s);
  if (m.lookingAt()) {
    System.out.println(m.group(1));
  }

打印出来:

Chemicon