如果你的字符串始終以這種格式(和格式化好),你甚至都不需要使用正則表達式。只是在拆分使用.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
如果你不打擾依靠日期和時間長度不變的事實,那麼有一種簡單的方法。 –