【发布时间】:2011-03-07 13:15:48
【问题描述】:
我想要这样的课程:
public interface IDateRecognizer
{
DateTime[] Recognize(string s);
}
日期可能存在于字符串中的任何位置,并且可能是任何格式。目前,我可以仅限于美国文化形式。日期不会以任何方式分隔。它们可能在日期的各个部分之间有任意数量的空格。我的想法是:
- ANTLR
- 正则表达式
- 手卷
我从未使用过 ANTLR,所以我会从头开始学习。我想知道是否有库或代码示例可以做类似的事情,可以让我开始。 ANTLR 是不是太重了,不适合这么窄的用途?
我以前使用过很多正则表达式,但出于大多数人讨厌它的所有原因,我讨厌它。
我当然可以手动滚动它,但我宁愿不重新解决已解决的问题。
建议?
更新:这是一个例子。鉴于此输入:
这是 63 年 11 月 3 日的日期。这是 另一个:1963年11月03日;和 另一个是 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 位数年份。考虑到这是异步处理的,性能是完全可以接受的。棘手的部分是以有效的方式标记和测试相邻标记集。
【问题讨论】:
标签: c# parsing antlr text-recognition