我想一類是這樣的:識別日期字符串中的
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單元測試建議 –