Java 用于分析csv中文件扩展名的正则表达式

Java 用于分析csv中文件扩展名的正则表达式,java,regex,Java,Regex,我正在阅读行,只需要保留文件名后的部分。我曾想过使用reg表达式,但似乎无法找到匹配项: 我的尝试是: Pattern p = Pattern.compile("\"\\w+\\.jpg\",\\s{1}"); Matcher m = p.matcher("\"0f23af5c71e3f9d7f59ab14277e2023.jpg\", 10.0, 45.0, 1.0, 2.0, 1.0, 1.0, 1.0, 2.0, 1.0, 3.0, 3.0, 0.0, 0.0, 1.0, 3.0, 1.0

我正在阅读行,只需要保留文件名后的部分。我曾想过使用reg表达式,但似乎无法找到匹配项: 我的尝试是:

Pattern p = Pattern.compile("\"\\w+\\.jpg\",\\s{1}");
Matcher m = p.matcher("\"0f23af5c71e3f9d7f59ab14277e2023.jpg\", 10.0, 45.0, 1.0, 2.0, 1.0, 1.0, 1.0, 2.0, 1.0, 3.0, 3.0, 0.0, 0.0, 1.0, 3.0, 1.0, 5.0, 0.0"); 
通常我想解析一个
字符串行
,其中包含如下数据:

"0f23af5c71e3f9d7f59ab14277e2023.jpg", 10.0, 45.0, 1.0, 2.0, 1.0, 1.0, 1.0, 2.0, 1.0, 3.0, 3.0, 0.0, 0.0, 1.0, 3.0, 1.0, 5.0, 0.0
"0f23af5c71e3f9d7f59ab14277e2023.jpg", 139.0, 67.0, 0.0, 7.0, 0.0, 2.0, 0.0, 0.0, 0.0, 0.0, 0.0, 4.0, 1.0, 1.0, 3.0, 2.0, 4.0, 1.0
"0f23af5c71e3f9d7f59ab14277e2023.jpg", 205.0, 70.0, 0.0, 0.0, 0.0, 2.0, 2.0, 0.0, 1.0, 3.0, 5.0, 0.0, 0.0, 2.0, 3.0, 0.0, 4.0, 3.0
并在每行中仅保留
10.0、45.0、1.0、2.0、1.0、1.0、1.0、2.0、1.0、3.0、3.0、0.0、1.0、3.0、1.0、5.0、0.0等部分

我似乎找不到匹配项,即使是仅针对

Pattern p = Pattern.compile("\"?"); // or even
Pattern p = Pattern.compile("\""); 

我错过了什么?

这对你来说很有用:

   String str = "\"0f23af5c71e3f9d7f59ab14277e2023.jpg\", 10.0, 45.0, 1.0, 2.0, 1.0, 1.0, 1.0, 2.0, 1.0, 3.0, 3.0, 0.0, 0.0, 1.0, 3.0, 1.0, 5.0, 0.0";
   str = str.replaceAll(".*jpg\",(.*)", "$1");
编辑

根据OP的要求,这是您修改的代码,只需检查模式即可

    Pattern p = Pattern.compile("\"\\w+\\.jpg\",\\s(.*)");
    Matcher m = p.matcher("\"0f23af5c71e3f9d7f59ab14277e2023.jpg\", 10.0, 45.0, 1.0, 2.0, 1.0, 1.0, 1.0, 2.0, 1.0, 3.0, 3.0, 0.0, 0.0, 1.0, 3.0, 1.0, 5.0, 0.0");

    if(m.matches()) {
        System.out.println(m.group(1));
    }

我更喜欢使用
replaceAll()
删除不需要的部分:

String numbers = input.replaceAll(".*\", ", "");

这将删除(替换为空白)包括“双引号逗号空格”在内的所有内容。

为什么不
split(“,”
?是的。我没有得到完整的答案(我想我在正则表达式中还有很多东西要学)。你的版本中隐含了“”?用修改过的代码编辑了我的答案。请参阅我替换的模式
{1}带有
(*)的
。您的解决方案也有效,但我将选择第一个正确答案作为解决方案。Thanks@Eypros尽管这是你的决定,但不要选择第一个正确答案,而是始终选择最佳正确答案:)我想到了这一点,但我无法区分这两个答案。这两个答案都按预期工作,我没有知识检查其他方面ts(效率等),所以我选择了第一个发布的答案。区别在于另一个答案不必要地捕获了一组
(.*)
,然后使用返回引用
$1
,这是您想要的部分。我的答案是最简单的。