我想要一个像这样的课程:
public interface IDateRecognizer
{
DateTime[] Recognize(string s);
}
日期可能存在于字符串中的任何位置,并且可能是任何格式。目前,我可以仅限于美国文化格式。日期不会以任何方式分隔。它们可能在日期的各个部分之间有任意数量的空格。我的想法是:
- ANTLR
- 正则表达式
- 手卷
我从未使用过 ANTLR,所以我将从头开始学习。我想知道是否有库或代码示例可以做类似的事情,可以让我开始。ANTLR 对于如此狭窄的用途来说是否太重了?
我以前使用过很多正则表达式,但我讨厌它,因为大多数人讨厌它。
我当然可以手动滚动它,但我宁愿不重新解决已解决的问题。
建议?
更新:这是一个例子。鉴于此输入:
这是 63 年 11 月 3 日的日期。这是另一个:1963 年 11 月 3 日;另一个是 63 年 11 月 3 日和更多(1963 年 11 月 3 日)。日期可以是任何美国格式。他们可能有像 11-2-1963 这样的破折号或像这样的奇怪的额外空白:1963 年 11 月 3 日,甚至可能像 [Nov 3 63] 那样缺少逗号,但这是一个边缘情况。
输出应该是一个包含七个日期时间的数组。每个日期都相同:11/03/1963 00:00:00。
更新:我完全用手卷了这个,我对结果很满意。我最终没有使用正则表达式,而是使用带有自定义 DateTimeFormatInfo 的 DateTime.TryParse,它允许您非常轻松地微调允许的格式以及处理 2 位数年份。考虑到这是异步处理的,性能是完全可以接受的。棘手的部分是以有效的方式标记和测试相邻标记集。