希望这是短小的问题.. 在下面的程序中,我已成功提取名为“pad.txt”的记事本文档中的所有数据,其中包含3组垂直对齐在'ID'后面加上'Name',然后加上'Date Joined',则该模式是一致的。从.txt文件中提取所有日期
记事本文档仅包括这样的: DID:1 名称:已加入鲍勃 日期:2014年1月12日 ID:2 名称:吉姆 加入日期:1993年8月21日 ID:3加入史蒂夫 日期: 名称2016年6月7日
我还定义接受可接受的日期格式的正则表达式:再次1-2数字,斜杠,1-2数字,斜杠,然后2至YEAR日期的四位数字。在开始时,我指定了一个通配符“。”。 < - 一个贪婪的量词“”星点,说的日期之前的任何字符的任意数目的被接受,以及在日后我还指定了
我的主要目标“”。这个代码是只提取所有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仅返回: “整个组:6/6/2016” 如前所述,我的目标是提取所有日期,但如果.matcher调用只捕获整个日期,我无法摆弄所有日期group:6/07/2016“ 在我看来,我说任何数量的任何字符在日期之前和之后都是允许的,所以它滚动到最底部并只发现最后日期,我如何定义正则表达式以便它抽出所有的日期,而不仅仅是最后一个,为什么只抽出最后一个呢?
我这个无情的审判,不能找出如何..
在此先感谢
AH!就这么简单,我知道我的.group实现必须稍微错误,非常感谢!有了这个,我已经进一步迈向正则表达式理解:) – Keith