示例字符串:
00000018.000f1b1f 0101559e Thu May 19 2016 00:24:14 -05:00 [k....
...提到了不需要的词。
没有像 Thu
这样的规范,如果我们用空格分隔,则始终是第三个字符串。它可以位于字符串中的任何位置。我想匹配 Thu May 19 2016 00:24:14 -05:00
并使用 simpedateformat
类进行解析。
我正在考虑一些正则表达式,例如 .*?((sun|mon|tue|wed|thu|fri|sat)\s* (jan|feb|mar|apr|may|jun|jul|aug |sep|oct|nov|dec)\s+\d{0,2}\s+\d{0,4}\s+\d{0,2}\:\d{0,2}\:\d{ 0,2}\s+([+|-]\d{0,2}:\d{0,2})?).*?
我不擅长正则表达式。请帮助我改进我的正则表达式,它可以通过 simpledateformat
类轻松解析。 -05:00
是可选的。
有什么建议吗?
最佳答案
您的正则表达式看起来不错,但您可以通过将搜索限制为单个空格和固定位数来提高性能
(?i)\b((sun|mon|tue|wed|thu|fri|sat) (jan|feb|mar|apr|may|jun|jul|aug|sep|oct|nov |dec)\d{1,2}\d{4}\d{2}\:\d{2}\:\d{2}( [+|-]\d{2}:\d{2 })?)
然后你可以循环搜索它 (while (matcher.find()) ...
)
请记住,日期格式取决于应用程序区域设置。期望某种格式将使您的应用程序变得脆弱。
关于Java - 高效的正则表达式来匹配日期和时间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42268414/