1

英数字フィールドを含む astring の最初の単語を取得したい

例えば。

文字列は 'abc123abc' または 'abc-123abc' のいずれかです。最初の 'abc' が必要です。for ループなしでそれを取得する方法はありますか (正規表現を使用してこれを実行したいのですが、正規表現についてあまり知りません)

実際の文字列パターンは

[A-Za-z]{2,5}[-]{0,1}[0-9]{1,15}[A-Za-z]{0,15}

私の目標は最初の単語を取得することです

4

5 に答える 5

4

Wrap the part of the expression that you would like to capture in a capturing group, and then use group(1) of the matcher to access it:

([A-Za-z]{2,5})-?[0-9]{1,15}[A-Za-z]{0,15}

The first group will capture everything up to the optional dash:

Pattern p = Pattern.compile("([A-Za-z]{2,5})-?[0-9]{1,15}[A-Za-z]{0,15}");
Matcher m = p.matcher("abc123abc");
if (m.find()) {
    System.out.println(m.group(1));
}

The above prints abc (link to ideone).

于 2012-12-12T14:54:16.360 に答える
3

としてみてください

System.out.println("abc-123abc".split("[-\\d]+")[0]);

出力

abc
于 2012-12-12T14:55:28.567 に答える
1
^[A-Za-z]+

文字列の先頭にある ASCII 文字と一致します。それはあなたが必要とするものですか?

于 2012-12-12T14:54:18.690 に答える
0
String word = "abc-123abc".replaceFirst("[^a-zA-Z].*$", "");

これにより、最初の非az文字以降のすべてが削除されます。キャプチャグループで置換を使用することもできます。

String word = "abc-123abc".replaceFirst("^([a-zA-Z]+).*$", "$1");

String.replaceFirst()

于 2012-12-12T15:08:34.740 に答える
0

の一致したテキストを取得できます^[A-Za-z]{2,5}。これはすべての最初の文字に一致します。

于 2012-12-12T14:56:24.773 に答える