0

我想在以下字符串中的第一个“来自”之后提取单词-

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

现在,我正在使用 -

“来自\s+([^\s]+)”

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

4

2 回答 2

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]+)

于 2012-06-30T11:17:58.130 回答
0

您可以lookingAt在 Method 对象上使用该方法。它在找到第一个匹配项后停止。

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));
  }

打印出来:

化学康
于 2012-06-30T12:58:54.083 回答