Java 为什么这个正则表达式会失败?
我有一个PCL文件,并用Notepad++打开它以查看源代码(使用PCL查看器我可以看到最终结果,但我还需要查看源代码) 请参阅实验室编号和其他字符我可以使用此正则表达式提取实验室编号及其代码:Java 为什么这个正则表达式会失败?,java,regex,Java,Regex,我有一个PCL文件,并用Notepad++打开它以查看源代码(使用PCL查看器我可以看到最终结果,但我还需要查看源代码) 请参阅实验室编号和其他字符我可以使用此正则表达式提取实验室编号及其代码: private static String PATTERN_LABNUMBER = "Lab Number[\\W\\D]*(\\d*)"; 它给了我: 0092616281 我现在想提取报告的日期,我使用这个正则表达式(经过多次尝试): 但在PCL文件中找不到它 我也尝试过: private s
private static String PATTERN_LABNUMBER = "Lab Number[\\W\\D]*(\\d*)";
它给了我:
0092616281
我现在想提取报告的日期,我使用这个正则表达式(经过多次尝试):
但在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})";
但同样没有找到结果。。。
你知道我在这最后一个正则表达式中遗漏了什么吗
非常感谢
更新:
我使用以下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;
}
下面是实现您想要的功能的代码
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));
}
你发布的图片和你的问题没有任何意义…在方括号内使用否定的速记时要小心<代码>[\\W\\D]与
[^\\W\\D]
不同。后者将匹配任何非字母数字或数字的字符。因此,它将匹配*
或(
,但不匹配x
或8
。然而,前者将匹配任何不是字母数字或不是数字的字符。因为字母不是数字,[\\W\\D]
将匹配任何字母,请注意使用\\W
+1,除非我不明白您为什么需要前瞻,(?=报告日期。*)
。为什么不像OP那样直接匹配它呢?特别是,我曾尝试不使用group,但我没能成功..向前看是不必要的..非常感谢.Pattern.MULTILINE是关键!!!!如果我这样说,它也在使用我的初始正则表达式!
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));
}