で文字列に番号を取得し、これは常にこのようである:私は文字列に2つの番号を抽出する必要が正規表現
file_Sig201701311539043872_1736587_614007_marketing.000
私は別の値で保存する必要があります。
どうしたらいいですか?
私は:\_(.*?)\_
で試しましたが、正しく動作しません。
で文字列に番号を取得し、これは常にこのようである:私は文字列に2つの番号を抽出する必要が正規表現
file_Sig201701311539043872_1736587_614007_marketing.000
私は別の値で保存する必要があります。
どうしたらいいですか?
私は:\_(.*?)\_
で試しましたが、正しく動作しません。
pattern matcher次試してみてください:印刷され
final Pattern NUMBER_MATCHER = Pattern.compile("_(\\d+)_(\\d+)");
Matcher matcher = NUMBER_MATCHER.matcher(/* your file name */);
if (matcher.find()) {
System.out.println("matcher.group(1) = " + matcher.group(1));
System.out.println("matcher.group(2) = " + matcher.group(2));
}
:
matcher.group(1) = 1736587
matcher.group(2) = 614007
を今正規表現は、アンダースコアが続く桁の任意の数字が続くアンダースコアのために働くし、再び桁の任意の数のために。
あなたは前後参照を活用することができます
(?<=_)(\\d+)(?=_)
キャプチャグループには必要な桁が含まれます。
ゼロ幅負の後読み、(?<=_)
が確認一致が_
によってゼロ幅の負の後読みを先行させる、(?=_)
確か一致が_
(\d+)
が続いていることができます1つ以上の数字と一致し、捕捉されたグループに入れられる
これで試してみてください。 サンプルコード
final Pattern NUMBER_MATCHER = Pattern.compile("_(\\d*)_(\\d*)");
Matcher matcher = NUMBER_MATCHER.matcher("file_Sig201701311539043872_1736587_614007_marketing.000");
if (matcher.find()) {
System.out.println(matcher.group(1));
System.out.println(matcher.group(2));
}
'(?<= _)\\ D +'だけで正常に動作するよう – XtremeBaumer
使用[ '^ファイル_ [^ _] * _([0-9] +)_([ 0-9] +) '](https://regex101.com/r/j9iOqy/1)。 –