Java 文件名的正则表达式

Java 文件名的正则表达式,java,regex,Java,Regex,我有格式为*C:\Temp\myfile\u 124.txt的文件* 我需要一个正则表达式,它只给我一个数字“124”,即下划线后面和扩展名之前的数字 我尝试了很多方法,最新的是 (.+[0-9]{18,})(_[0-9]+)?\\.txt$ 我没有得到期望的输出。有人能告诉我怎么了吗 Matcher matcher = FILE_NAME_PATTERN.matcher(filename); if (matcher.matches() && ma

我有格式为*C:\Temp\myfile\u 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) {

            }   

第一部分
[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));

这可能适用于您:
(?:...))(\d+\.txt
结果在比赛组。 这一个使用正向前瞻,将只匹配以下数字:
\d+(?=\.txt)

组1将包含所需的输出

你可以这样做

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

这也应该奏效。当然,您应该对Java进行双转义。

第一组指定您的文件名中应该有18位数字,而您没有。由于文件名长度可以增加,所以我给了18位作为长度。除此之外,我的错误是什么?特别是在下划线部分之后?您还指定了它只能在[0-9]之间这意味着0,1,2,3,4,5,6,7,8或9,还有其他字母,比如C,C,T,e,m,p,m,y,f,i,l,e
.*_([1-9]+)\.[a-zA-Z0-9]+
^.*_\([^\.]*\)\..*$
.*_([0-9]+)\.txt