0

我的文件格式为 *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) {

            }   
4

5 回答 5

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
于 2012-11-14T09:37:33.470 回答
0
.*_([1-9]+)\.[a-zA-Z0-9]+

组 1 将包含所需的输出。

演示

于 2012-11-14T09:38:19.043 回答
0

你可以这样做

^.*_\([^\.]*\)\..*$
于 2012-11-14T09:41:25.420 回答
0
.*_([0-9]+)\.txt

这也应该有效。当然,您应该为 Java 进行双重转义。

于 2012-11-14T09:41:43.573 回答
0

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

于 2012-11-14T09:38:05.520 回答