我正在尝试使用 Java 模式匹配器在文件扩展名之前提取四位数字。它抛出没有组发现异常。有人可以帮我解决这个问题吗?
String fileName = "20210101-000000_first_second_1234.csv";
Pattern pattern = Pattern.compile("\\\\d{4}");
System.out.println(pattern.matcher(fileName).group(4));
Run Code Online (Sandbox Code Playgroud)
我想1234从文件名中获取。我使用 regex 编译了文件模式\\\\d{4}。返回四个组。因此,第四组应该假设返回1234未返回的内容,而不是抛出组未找到异常。
字符串"\\\\d{4}"文字定义了一个与字符串\\d{4}匹配的正则表达式\dddd(一个反斜杠,然后是四个d字符)。您尝试访问组 4,但正则表达式中没有定义捕获组。Matcher#find此外,在实际使用或运行匹配器之前,您无法访问匹配组Matcher#matches。
您可以使用
String fileName = "20210101-000000_first_second_1234.csv";
Pattern pattern = Pattern.compile("\\d{4}(?=\\.[^.]+$)");
Matcher m = pattern.matcher(fileName);
if (m.find()) {
System.out.println(m.group());
}
Run Code Online (Sandbox Code Playgroud)
\d{4}- 四位数(?=\.[^.]+$)- 正向前瞻,需要一个.字符,然后是一个或多个字符,直到.字符串末尾。另请注意Matcher m = pattern.matcher(fileName)添加并if (m.find())检查是否存在匹配。仅当存在匹配时,才可以从第 0 组 中检索该值m.group()。
| 归档时间: |
|
| 查看次数: |
82 次 |
| 最近记录: |