2011-04-08 141 views
1

我有一个PCL文件,并用Notepad ++打开它来查看源代码(使用PCL Viewer查看最终结果,但我也需要查看源代码)。为什么这个正则表达式失败?

enter image description here

请参阅实验室数量和字符的其余部分。 我能够提取实验室数及其与此正则表达式代码:

private static String PATTERN_LABNUMBER = "Lab Number[\\W\\D]*(\\d*)"; 

,这让我:

0092616281 

我现在想提取报告日期,我用这个正则表达式(后很多其他尝试):

private static String PATTERN_DATE_REPORTED = 
     "Date Reported[\\W\\D]*(\\d\\d/\\d\\d/\\d\\d\\d\\d \\d\\d:\\d\\d)"; 

但它没有在PCL文件中找到它。

我也试过用:

private static String PATTERN_DATE_REPORTED = 
     "Date Reported[\\W\\D]*([0-9]{2}/[0-9]{2}/[0-9]{4} [0-9]{2}:[0-9]{2})"; 

但同样没有找到结果... 你看到我失去了一些东西在这最后的正则表达式?

非常感谢!

UPDATE

我用这个java代码提取实验室数量和日期报道:

public String extractWithRegEx(String regextype, String input) { 
     String matchedString = null; 

     if (regextype != null && input != null) { 
      Matcher matcher = Pattern.compile(regextype).matcher(input); 
      if (matcher.find()) { 
       System.out.println("Matcher found for regextype "+regextype); 
       matchedString = matcher.group(0); 
       if (matcher.groupCount() > 0) { 
        matchedString = matcher.group(1); 
       } 
      } 
     } 
     return matchedString; 
    } 
+0

的您发布的图片和您的问题没有任何意义... – 2011-04-08 07:25:23

+1

在方括号内使用取反的短手时要小心。 '[\\ W \\ D]'是**不是** [^ \\ w \\ d]'。后者将匹配任何不是字母数字或数字的字符。所以它会匹配'*'或'(',但不是'x'或'8'。但前者会匹配任何不是字母数字或不是数字的字符,因为一个字母不是一个数字数字,'[\\ W \\ D]'**将匹配任何字母,尽管使用了'\\ W'. – mousio 2011-04-08 08:06:13

回答

2

这里是实现你想要的代码..

 Pattern pattern = Pattern.compile("Date Reported.*(\\d{2}/\\d{4} \\d{2}:\\d{2})$", Pattern.MULTILINE); 
     String st = "date dfdsfsd fgfd gdfgfdgdf gdfgdfg gdfgdf 3232/22/2010 23:34\n"+ 
     "dsadsadasDate Reported gdfgfd gdfgfdgdf gdfgdfg gdfgdf 3232/22/2010 23:34"; 
     Matcher matcher = pattern.matcher(st); 
     while (matcher.find()) { 
      System.out.println(matcher.group(1)); 
     } 
+0

+1,除了我不明白为什么你需要向前看,'(? => Date Reported。*)'。为什么不直接匹配它,就像OP那样? – 2011-04-08 07:44:48

+0

特别是,我试过不使用group,但是我不能成功..展望未来.. – 2011-04-08 07:49:44

+0

非常感谢。 MULTILINE是关键!!!!如果我把这个,它也与我的初始正则表达式一起工作! – 2011-04-08 07:52:42