次の文字列の最初の「から」の後の単語を抽出したい-
「ケミコン由来の抗CD24、サンタ由来の抗CD48」
現在、私は使用しています-
"from\s+([^\s]+)"
しかし、'Chemicon' だけでなく、'Chemicon' と 'Santa' の両方の結果が得られます。
次の文字列の最初の「から」の後の単語を抽出したい-
「ケミコン由来の抗CD24、サンタ由来の抗CD48」
現在、私は使用しています-
"from\s+([^\s]+)"
しかし、'Chemicon' だけでなく、'Chemicon' と 'Santa' の両方の結果が得られます。
多分あなたはこのようなことをすることができます:
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]+)
lookingAt
Method オブジェクトでメソッドを使用できます。最初の一致が見つかった後、停止します。
関数と同様に、関数matches
とは異なり、最初から一致する必要があるため、正規表現を使用する必要があります。これは、最初の「from」までのすべてに一致し、次に1つ以上の空白文字、次に次の「単語」に一致します。「from」の後の単語にアルファベット文字のみを一致させたい場合は、 を使用します。先頭のは貪欲でないマッチングを意味します。使用するだけの場合、最初のものではなく、最後の「from」と一致します。find
lookingAt
".*?from\\s+(\\w+)"
".*?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));
}
プリントアウト:
ケミコン