gpt4 book ai didi

java - 从 .txt 文件中提取所有日期

转载 作者:行者123 更新时间:2023-11-30 07:04:04 25 4
gpt4 key购买 nike

希望这很简短并且能解决问题..在下面的程序中,我已成功从名为“pad.txt”的记事本文档中提取了所有数据,该文档由 3 组垂直对齐的“ID”、后跟“名称”、后跟“加入日期”组成,该模式是一致的。

记事本文档仅包含以下内容:号码:1姓名:鲍勃加入日期: 01/12/2014编号:2姓名:吉姆加入日期:1993年8月21日编号:3姓名:史蒂夫加入日期:2016 年 6 月 7 日

我还定义了一个正则表达式,它接受可接受的日期格式:1-2 位数字,斜杠,再次 1-2 位数字,斜杠,然后 2 到 4 位数字表示 YEAR 日期。在我指定的开头通配符“.” <- 带有贪婪量词“”的点星号,表示接受日期之前以及日期之后的任意数量的任何字符,我还指定了“.

我使用此代码的主要目标是仅提取 pad.txt 文件中的所有日期,并将它们存储在字符串或其他内容中。

公共(public)类主要{

public static void main(String args[]) throws Exception{

StringBuilder builder = new StringBuilder();
FileReader reader = new FileReader(new File("pad.txt"));

// Define valid date format via regex
String dateRegex = ".* (\\d{1,2})/(\\d{1,2})/(\\d{2,4}) .* ";

int fileContent = 0;
// iterate through entire notepad doc, until = 0 AKA (finished searching doc)
while((fileContent = reader.read()) !=-1){

builder.append((char)fileContent);

}//encapsulating loop
reader.close();

String extracted = builder.toString();
System.out.println("Extracted: " + extracted);
System.out.println();

Matcher m = null;
// Validate that file contents conform with 'dateRegex'
m = Pattern.compile(dateRegex).matcher(extracted);
if(m.find()){
System.out.println("Entire group : " + m.group());
}
}
}

不幸的是,m.group();输出仅返回:“整个小组:2016 年 6 月 7 日”如前所述,我的目标是提取所有日期,但如果 .matcher 调用仅捕获“整个组:6/07/2016”,我就无法处理所有日期在我看来,我说日期之前和之后允许使用任何数量的任何字符,因此它滚动到最底部并仅找到最后一个日期,我如何定义正则表达式以便它提取所有日期,而不是只是最后一个,为什么它只拉最后一个?

我一直在不懈地尝试这个,但不知道如何......

提前致谢

最佳答案

嗯,这相对容易。您无法编写一次匹配所有日期的正则表达式,但您可以按照预期使用匹配器,即 find() 返回 true 的频率为可以找到另一个匹配项。因此,您必须修改正则表达式并删除两端的 .* 。然后你可以简单地这样做:

StringBuilder dateListBuilder = new Stringbuilder();
while(m.find()){
dateListBuilder.append(m.group());
}
System.out.println(dateListBuilder.toString());

关于java - 从 .txt 文件中提取所有日期,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40432011/

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