2017-01-31 2 views
1

で文字列に番号を取得し、これは常にこのようである:私は文字列に2つの番号を抽出する必要が正規表現

file_Sig201701311539043872_1736587_614007_marketing.000 

私は別の値で保存する必要があります。

どうしたらいいですか?

私は:\_(.*?)\_で試しましたが、正しく動作しません。

+0

'(?<= _)\\ D +'だけで正常に動作するよう – XtremeBaumer

+0

使用[ '^ファイル_ [^ _] * _([0-9] +)_([ 0-9] +) '](https://regex101.com/r/j9iOqy/1)。 –

答えて

1

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 

を今正規表現は、アンダースコアが続く桁の任意の数字が続くアンダースコアのために働くし、再び桁の任意の数のために。

1

あなたは前後参照を活用することができます

(?<=_)(\\d+)(?=_) 

キャプチャグループには必要な桁が含まれます。

  • ゼロ幅負の後読み、(?<=_)が確認一致が_

  • によってゼロ幅の負の後読みを先行させる、(?=_)確か一致が_

  • (\d+)が続いていることができます1つ以上の数字と一致し、捕捉されたグループに入れられる

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)); 
     } 
関連する問題