我想一类是这样的:识别日期字符串中的
public interface IDateRecognizer
{
DateTime[] Recognize(string s);
}
的日期可能存在的任何地方字符串中,可能是任何格式。目前,我可以限制美国的文化格式。日期不会以任何方式分隔。它们可能在日期的各个部分之间有任意数量的空白。我的想法是:
- ANTLR
- 正则表达式
- 手卷
我从来没有使用ANTLR,所以我会从头开始学习。我想知道是否有类似的库或代码示例可以启动我。 ANTLR对于如此狭窄的用途来说太重了吗?
我以前用过Regex很多,但是我讨厌它,因为大多数人都讨厌它。
我当然可以滚动它,但我宁愿不重新解决一个解决的问题。
对此提出建议?
UPDATE:这里是一个例子。给定此输入:
这是日期11/3/63。这是 另一个:1963年11月3日;和另一个11月03日,63日和一些 更多(11/03/1963) 。日期可以是任何美国格式的 。他们可能有 破折号像1963年11月2日或怪异的额外 空格内是这样的: 月 3, 1963年, 甚至也许逗号缺失 像[63年11月3日],但是这是一个边缘 的情况。
输出应该是一个由七个DateTime组成的数组。每个日期都是一样的:11/03/1963 00:00:00。
UPDATE:我完全手卷了这个,我很满意这个结果。我没有使用Regex,而是使用DateTime.TryParse和一个自定义的DateTimeFormatInfo,它可以非常容易地调整允许的格式和2位数年份的处理方式。考虑到这是异步处理,性能是完全可以接受的。棘手的部分是以有效的方式标记和测试相邻令牌的集合。
+1单元测试建议 –