我要在以下與字符串第一匹配模式之後的Java正則表達式返回
第一「從」後提取詞「抗CD24自Chemicon,和抗CD48聖誕老人」
現在,我使用 -
「從\ S +([^ \ S] +)」
但它同時給出'Chemicon'和'Santa'結果,而不是'Chemicon'結果。
我要在以下與字符串第一匹配模式之後的Java正則表達式返回
第一「從」後提取詞「抗CD24自Chemicon,和抗CD48聖誕老人」
現在,我使用 -
「從\ S +([^ \ S] +)」
但它同時給出'Chemicon'和'Santa'結果,而不是'Chemicon'結果。
您可以在Method對象上使用lookingAt
方法。它在找到第一場比賽後停止。
像matches
功能,不像find
功能lookingAt
必須從一開始匹配,所以我們必須使用正則表達式".*?from\\s+(\\w+)"
,它說:匹配任何內容,直到第一個「從」,那麼一個或多個空格字符,然後是下一個「單詞」。如果您只希望按字母順序來匹配「from」後的單詞,請使用".*?from\\s+([a-zA-Z])"
。開頭處的".*?"
表示非貪婪匹配。如果您只使用".*"
它將匹配最後的「from」,而不是第一個。
這裏的代碼,我測試過:
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
thanx,它甚至可以在使用'。*?'而不是''*''之後使用'find'。''' – user1419742
是的,好的捕獲 - 也適用於此案件。因爲我們使用任何角色的非貪婪匹配,使得在這種情況下查找工作。 – quux00
也許你可以做這樣的事情:
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]+)
天哪!在我的Eclipse中實現它之後會輸入相同的代碼.. +1因爲比我更快lol – verisimilitude
thanx,但是我使用的是來自\\ s +([^ \\ s])的'anti-CD24。* +)',在這種情況下,它實際上是匹配最後一個,即。 '聖誕老人',但我想提取'Chemicon', – user1419742
然後,只需使用第一個結果? –
如何提取出第一個結果?我正在使用'if(m.find())',它提供了兩個結果而不是第一個結果。 – user1419742