用点分隔的Java正则表达式匹配日期
我有下面的正则表达式用点分隔的Java正则表达式匹配日期,java,regex,date,Java,Regex,Date,我有下面的正则表达式 [\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行匹配,您需要转义句点字符,因为它在正则表达式中被视为通配符。此外,您在不需要的地方使用了。字符类用方括号表示,用
[\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行匹配,您需要转义句点字符,因为它在正则表达式中被视为通配符。此外,您在不需要的地方使用了。字符类用方括号表示,用于列出该位置的可接受字符。使用此正则表达式签出:
\d\d\.\d\d\.\d\d.*$
解释
搜索您知道的数字\d
查找literal\。
字符,而不是将句点的正则表达式解释为通配符
用于匹配日期匹配后的行剩余部分*
表示行的结尾,确保我们已匹配整行$
- 通常建议不要使用正则表达式验证日期时间字符串,而是使用标准库中的日期时间格式化程序。在你的情况下,这可能不是绝对必要的,但我想把它作为一个选项,既给你,也给任何阅读的人
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);
}
}
上面的代码片段打印:
匹配。日期时间为2018-04-12T15:59。行的其余部分是:-A:xyz
没有对手。电话号码是:12345 abc
匹配。日期时间为2018-04-12T16:00。行的剩余部分是:-B:cde
没有对手。电话号码是:abc 12345
潜在优势包括:
- 它更严格地验证了数字是否构成了有效的日期和时间
- 从代码中可以清楚地看出,日期时间正在被检查。正则表达式的正确读写有点棘手
- 您可以将日期和超时作为日期时间对象,以便在需要时进行进一步处理
[\d\\d[.]\d\d[.]\d\d]
在实际的正则表达式中,它周围的方括号都是吗?您将它们都放在一个字符类中。拆下外支架<代码>“\\d\\d[.]\\d\\d[.]\\d\\d”不匹配。@karottenbunker这是对我的“\\d\\d[.]\\d\\d[.]\\d\\d”
建议的反馈吗?是的。您的代码可能只是使用了.matches()
,而您应该使用.find()
。如果有日期,您希望匹配整行还是仅匹配日期部分?我不确定您是否需要使用双斜杠作为数字字符(\\d
)。我不太熟悉Java中的正则表达式,但如果这不起作用,应该使用双斜杠。