文件名的正则表达式

时间:2012-11-14 09:34:10

标签: java regex

我的文件格式为* C:\ Temp \ myfile_124.txt *

我需要一个正则表达式,它会给我一个数字“ 124 ”,这是在下划线之后和扩展之前的任何内容。

我尝试了很多方法,最新的是

(.+[0-9]{18,})(_[0-9]+)?\\.txt$

我没有得到所需的输出。有人能告诉我出了什么问题吗?

       Matcher matcher = FILE_NAME_PATTERN.matcher(filename);
        if (matcher.matches() && matcher.groupCount() == 2) {
            try {
                String index = matcher.group(2);
                if (index != null) {
                    return Integer.parseInt(index.substring(1));
                }
            }
            catch (NumberFormatException e) {

            }   

5 个答案:

答案 0 :(得分:2)

第一部分[0-9]{18,}表示您至少有18位数字。

通常使用正则表达式,使表达式尽可能简单是一个好主意。我建议尝试

_([0-9]+)?\\.txt$

注意:您必须调用find()才能执行查找,否则会显示“找不到匹配项”


这个例子

String s = "C:\\Temp\\myfile_124.txt";
Pattern p = Pattern.compile("_(\\d+)\\.txt$");
Matcher matcher = p.matcher(s);
if (matcher.find())
    for (int i = 0; i <= matcher.groupCount(); i++)
        System.out.println(i + ": " + matcher.group(i));

打印

0: _124.txt
1: 124

答案 1 :(得分:0)

这可能适合您:(?:.*_)(\d+)\.txt 结果在匹配组中。 这个使用正向前瞻,只会匹配数字:\d+(?=\.txt)

答案 2 :(得分:0)

.*_([1-9]+)\.[a-zA-Z0-9]+

第1组将包含所需的输出。

Demo

答案 3 :(得分:0)

你可以这样做

^.*_\([^\.]*\)\..*$

答案 4 :(得分:0)

.*_([0-9]+)\.txt

这也应该有用。当然你应该为Java双重逃避。