【发布时间】:2014-08-02 10:32:06
【问题描述】:
我正在编写一些用于从非常大的数据集中解析日期的代码。我有以下正则表达式来匹配不同的日期变化
"(((0?[1-9]|1[012])(/|-)(0?[1-9]|[12][0-9]|3[01])(/|-))|"
+"((january|february|march|april|may|june|july|august|september|october|november|december)"
+ "\\s*(0?[1-9]|[12][0-9]|3[01])(th|rd|nd|st)?,*\\s*))((19|20)\\d\\d)"
匹配格式为“月 dd、yyyy”、“mm/dd/yyyy”和“mm-dd-yyyy”的日期。这适用于这些格式,但我现在遇到欧洲“dd Month,yyyy”格式的日期。我尝试添加 (\\d{1,2})?在正则表达式的开头并添加一个?正则表达式的当前日期匹配部分之后的量词
"((\\d{1,2})?((0?[1-9]|1[012])(/|-)(0?[1-9]|[12][0-9]|3[01])(/|-))|"
+"((january|february|march|april|may|june|july|august|september|october|november|december)"
+ "\\s*(0?[1-9]|[12][0-9]|3[01])?(th|rd|nd|st)?,*\\s*))((19|20)\\d\\d)"
但这并不完全可行,因为它有时会捕获月份前后的数字字符(例如,'00 January 15, 2013'),有时两者都不会('January 2013')。有没有办法确保捕获两者中的一个?
【问题讨论】:
-
看看
SimpleDateFormat -
实际上,SimpleDateFormat 可能不够严格。我会改用 Joda DateTimeFormatter。
-
如果您知道约会地点,请明确使用
SimpleDateFormats。在一个丑陋、可怕、无法维护的正则表达式中正确处理这一点会浪费你宝贵的生命。如果您认真认为它一定是正则表达式,请告诉我们为什么要找到出路。 -
只有我一个人,还是这个问题每天出现一次?