如果你的字符串始终以这种格式(和格式化好),你甚至都不需要使用正则表达式。只是在拆分使用.substring
和.indexOf
第二空间:
String test = "24.12.17 18:17 TestString";
int idx = test.indexOf(" ", test.indexOf(" ") + 1);
System.out.println(test.substring(0, idx));
System.out.println(test.substring(idx).trim());
见Java demo。
如果你想确保你的字符串日期时间值开始,你可以使用一个匹配的方法来串用含2个捕获组匹配的模式:一个将捕获的日期和其他将捕获休息的字符串:
String test = "24.12.17 18:17 TestString";
String pat = "^(\\d{2}\\.\\d{2}\\.\\d{2} \\d{2}:\\d{2})\\s(.*)";
Matcher matcher = Pattern.compile(pat, Pattern.DOTALL).matcher(test);
if (matcher.find()) {
System.out.println(matcher.group(1));
System.out.println(matcher.group(2).trim());
}
查看Java demo。
详细:
^
- 字符串的开始
(\\d{2}\\.\\d{2}\\.\\d{2} \\d{2}:\\d{2})
- 第1组:日期时间模式(xx.xx.xx xx:xx
样模式)
\\s
- 一个空格(如果是可选的,加之后的*
)
(.*)
- 第2组捕获任何0+字符直到字符串结尾(.
也会匹配换行符,因为Pattern.DOTALL
标志)。
您的字符串是否始终是此格式的日期,后面是任意文本? – pchaigno
如果你不打扰依靠日期和时间长度不变的事实,那么有一种简单的方法。 –