私は他の質問を見ましたが、それらは私を答えに導きませんでした。
私はこのコードを持っています:
Pattern p = Pattern.compile("exp_(\\d{1}-\\d)-(\\d+)");
照合したい文字列は次のとおりです。exp_5-22-718
5-22
抽出したいのですが718
。なぜ機能しないのかよくわかりません。何が欠けていますか?どうもありがとう
文字列に常に接頭辞が付いている場合exp_
、正規表現は使用しません。
私は...するだろう:
replaceFirst()
exp_
split()
結果の文字列-
注:この回答は仮定に基づいています。複数のハイフンがある場合は、より堅牢なものとして提供します。ただし、数字の形式を検証する必要がある場合は、正規表現の方が適している場合があります。
これを試してください:
Pattern p = Pattern.compile("exp_(\\d-\\d+)-(\\d+)");
元のパターンでは、2 番目の数字には 1 桁の数字を含めるように指定したので、できるだけ\d+
多くの数字を一致させるようにしました。{1}
また、正規表現に値を追加しないため、最初の数値定義から削除しました。
正規表現で、2 桁目に必要な量指定子がありませんでし\\d
た。この量指定子は+
または{2}
です。
String yourString = "exp_5-22-718";
Matcher matcher = Pattern.compile("exp_(\\d-\\d+)-(\\d+)").matcher(yourString);
if (matcher.find()) {
System.out.println(matcher.group(1)); //prints 5-22
System.out.println(matcher.group(2)); //prints 718
}
これを行うには、string.split メソッドを使用できます。次のコードを確認してください。あなたの文字列は「exp_」で始まると思います。
String str = "exp_5-22-718";
if (str.contains("-")){
String newStr = str.substring(4, str.length());
String[] strings = newStr.split("-");
for (String string : strings) {
System.out.println(string);
}
}