我有以下正则表达式
[\d\\d[.]\d\d[.]\d\d]
和[\\d\\d\\.\\d\\d\\.\\d\\d].*
他们既可以正确地匹配带日期的行,又可以匹配不包含日期但只包含数字(和文本)的行。
我的文本格式如下:
12.04.18, 15:59 - A: xyz
12345 abc
12.04.18, 16:00 - B: cde
abc 12345
我希望正则表达式匹配第1行和第3行
答案 0 :(得分:0)
您需要转义句点字符,因为它在正则表达式中被视为通配符。另外,您在不需要的地方使用Character Class。字符类用方括号指示,并用于列出该位置可接受的字符的列表。使用此正则表达式签出:
\d\d\.\d\d\.\d\d.*$
\d
搜索您知道的数字\.
寻找字母.
,而不是将句点作为通配符的正则表达式解释.*
用于匹配日期匹配后的其余行$
表示行的结尾,请确保我们已匹配整行。答案 1 :(得分:0)
通常的建议是不要使用正则表达式来验证日期时间字符串,而应使用标准库中的日期时间格式化程序。在您的情况下,这可能不是绝对必要的,但我想将它作为一种选择提供给您和所有阅读者。
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("dd.MM.uu, H:mm");
String[] lines = {
"12.04.18, 15:59 - A: xyz",
"12345 abc",
"12.04.18, 16:00 - B: cde",
"abc 12345"
};
for (String line : lines) {
ParsePosition pos = new ParsePosition(0);
try {
LocalDateTime dateTime = LocalDateTime.from(formatter.parse(line, pos));
System.out.println("Match. Date-time is " + dateTime
+ ". Remainder of line is: " + line.substring(pos.getIndex()));
} catch (DateTimeParseException dtpe) {
System.out.println("No match. Line was: " + line);
}
}
上面的代码段打印出来:
Match. Date-time is 2018-04-12T15:59. Remainder of line is: - A: xyz
No match. Line was: 12345 abc
Match. Date-time is 2018-04-12T16:00. Remainder of line is: - B: cde
No match. Line was: abc 12345
潜在的优势包括: