gpt4 book ai didi

即使在困惑的字符串中也能找到 YYYY-MM 的 Java 正则表达式

转载 作者:行者123 更新时间:2023-12-01 13:28:47 25 4
gpt4 key购买 nike

我需要一个正则表达式来从文件名中查找年份和月份值,这可能会变得非常困惑。我的示例是“SuSa_Q2Factory_2012-08.xls”。我的正则表达式很恼火,因为人们有时也会将公司名称中的单个“2”写入文件名中。

目前我的正则表达式如下所示:

// Search for date of the Format 2012-02 / YYYY-MM
if (fileName.matches("[0-9]{4}[\\-\\_\\.\\,\\ ][0-9]{2}\\.(xls|xlsx)")) {
int year = Integer.parseInt(fileName.substring(0, 4));
int month = Integer.parseInt(fileName.substring(5, 7));
return new Month(year, month);
}

// Search for date of the Format 2012-2 / YYYY-M
if (fileName.matches("[0-9]{4}[\\-\\_\\.\\,\\ ][0-9]\\.(xls|xlsx)")) {
int year = Integer.parseInt(fileName.substring(0, 4));
int month = Integer.parseInt(fileName.substring(5, 6));
return new Month(year, month);
}

最佳答案

您可以使用PatternMatcher 类:

import java.util.regex.Pattern;
import java.util.regex.Matcher;

[...]

String fileName = "SuSa_Q2Factory_2012-08.xls";
Pattern p = Pattern.compile(".*([0-9]{4})[-_., ]([0-9]{1,2})\\.(xls|xlsx)");
Matcher m = p.matcher(fileName);
if (m.matches()) {
int year = Integer.parseInt(m.group(1));
int month = Integer.parseInt(m.group(2));
System.out.printf("year = %d, month = %d\n", year, month);
}

这将打印年 = 2012,月 = 8

您的代码不起作用,因为公司名称没有固定长度,并且硬编码的 substring 索引不起作用(您只是不知道 月-年 字符串的一部分开始)。您需要捕获正则表达式组中的,并使用Matcher.group(int)方法提取它们。

关于即使在困惑的字符串中也能找到 YYYY-MM 的 Java 正则表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21675643/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com