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 回答