【问题标题】:Extracting all DATES from a .txt file从 .txt 文件中提取所有日期
【发布时间】: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 日”,我将无法处理所有日期 在我看来,我说在日期之前和之后允许任何数量的任何字符,所以它滚动到最底部并只找到最后一个日期,我如何定义正则表达式以便它提取所有日期,而不是只是最后一个,为什么只拉最后一个?

我已经无情地尝试过,但无法弄清楚如何..

提前致谢

【问题讨论】:

    标签: java regex


    【解决方案1】:

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

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

    【讨论】:

    • 啊!就这么简单,我知道我的 .group 实现一定有一点错误,非常感谢!有了这个,我在正则表达式的理解上取得了更大的进步:)
    猜你喜欢
    • 2019-02-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-06-06
    • 1970-01-01
    • 2015-10-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多