英数字フィールドを含む astring の最初の単語を取得したい
例えば。
文字列は 'abc123abc' または 'abc-123abc' のいずれかです。最初の 'abc' が必要です。for ループなしでそれを取得する方法はありますか (正規表現を使用してこれを実行したいのですが、正規表現についてあまり知りません)
実際の文字列パターンは
[A-Za-z]{2,5}[-]{0,1}[0-9]{1,15}[A-Za-z]{0,15}
私の目標は最初の単語を取得することです
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).
としてみてください
System.out.println("abc-123abc".split("[-\\d]+")[0]);
出力
abc
^[A-Za-z]+
文字列の先頭にある ASCII 文字と一致します。それはあなたが必要とするものですか?
String word = "abc-123abc".replaceFirst("[^a-zA-Z].*$", "");
これにより、最初の非az文字以降のすべてが削除されます。キャプチャグループで置換を使用することもできます。
String word = "abc-123abc".replaceFirst("^([a-zA-Z]+).*$", "$1");
の一致したテキストを取得できます^[A-Za-z]{2,5}
。これはすべての最初の文字に一致します。