0

以下のようなファイル名を取得していますname。最後のIPと別の数値を削除して、最終的に実際のファイル名を取得したいと思います。正規表現を使用するよりもこれを達成するためのより良い方法はありますか?多分他のいくつかのテクニック?これを知るのを手伝ってください。

        String name = "pdf_of_filename_127.10.10.0_8726347.xls";

        System.out.println("Initial File Name :"+name);

        String [] t = name.split("_");
        String finalpart = t[t.length - 1];
        String extension = finalpart.substring(finalpart.lastIndexOf("."),finalpart.length());

        String finalName = "";

        for(int i = 0;i < t.length - 2;i++)
            finalName += t[i]+"_";
        finalName = finalName.substring(0,finalName.length() - 1);

        System.out.println("Final File Name :"+finalName+extension);

出力:

Initial File Name :pdf_of_filename_127.10.10.0_8726347.xls

Final File Name :pdf_of_filename.xls

詳細については:

String name = "pdf_of_filename_53613785621.183761237_127.10.10.0_8726347.xls";

output Expected:
Final File Name :pdf_of_filename_53613785621.183761237.xls
4

3 に答える 3

3

これはうまくいくでしょう:

String name = "pdf_of_filename_53613785621.183761237_127.10.10.0_8726347.xls";
String finalName = name.replaceAll("_(\\d+\\.){3}[\\d_]+","");
System.out.println("finalName = " + finalName);

これにより、次のような部分文字列が削除されます。

_             an underscore
(\\d+\\.){3}  followed by 3 times a digit and a period (127.10.10.)
[\\d_]+       then some digits and underscores (0_876347)
于 2013-03-10T13:17:24.440 に答える
2

どうですか

name = name.replaceAll("_[\\d._]+\\.",".");

問題の新しい要件の編集

試す:

name = name.replaceAll("_\\d{1,3}\.[\\d._]+\\.",".");
于 2013-03-10T13:18:00.170 に答える
1

IP で終わるファイル名、任意の桁数、および 3 ~ 4 文字の長さのファイル拡張子を検証するための安全な正規表現:

^(.*)_[12]?\d{1,2}\.[12]?\d{1,2}\.[12]?\d{1,2}\.[12]?\d{1,2}_\d+\.([a-z]{3,4})$

置き換え:\1.\2
デモの説明: http://regex101.com/r/tE3iB8

短い:^(.*)_([12]?\d{1,2}\.){3}[12]?\d{1,2}_\d+\.([a-z]{3,4})$
置き換え:\1.\3
デモの説明: http://regex101.com/r/rM6mD8

于 2013-03-10T13:27:00.297 に答える