【发布时间】:2016-11-04 21:32:18
【问题描述】:
希望这是简短的问题.. 在下面的程序中,我成功地从名为“pad.txt”的记事本文档中提取了所有数据,该文档由 3 个垂直对齐的集合组成,分别与“ID”、“名称”和“加入日期”对齐,该模式是一致的。
记事本文档仅包含以下内容: 编号:1 姓名:鲍勃 加入日期:2014 年 1 月 12 日 编号:2 姓名:吉姆 加入日期:1993 年 8 月 21 日 编号:3 姓名:史蒂夫 加入日期:2016 年 6 月 7 日
我还定义了一个接受可接受的日期格式的正则表达式:1-2 位数字、斜线、1-2 位数字、斜线,然后是 YEAR 日期的 2 到 4 位数字。在我指定的开头通配符“.” ”的星号,表示在日期之前的任意数量的任意字符,以及在日期之后我还指定了“.”
我使用此代码的主要目标是仅提取 pad.txt 文件中的所有日期,并将它们存储在字符串或其他东西中..
公共类主{
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(); outprint 仅返回: “整个小组:2016 年 6 月 7 日” 如前所述,我的目标是提取所有日期,但如果 .matcher 调用仅捕获“整个组:2016 年 6 月 7 日”,我将无法处理所有日期 在我看来,我说在日期之前和之后允许任何数量的任何字符,所以它滚动到最底部并只找到最后一个日期,我如何定义正则表达式以便它提取所有日期,而不是只是最后一个,为什么只拉最后一个?
我已经无情地尝试过,但无法弄清楚如何..
提前致谢
【问题讨论】: