我正在尋找C#中的快速方法來查找字符串中的所有日期(該字符串是一個大文本,我要掃描大約200,000個不同的字符串)。由於有很多寫日期的方法(例如2012年12月31日或2012年12月31日以及更多), 我使用這個正則表達式(它應該涵蓋幾乎所有常用的寫日期方式):在字符串中找到日期
串findDates =「: - |(((\ d {1,4})/.- /?):(\ S \ d {1,2})\ S +(一月( ?:uary){0,1} \ {0,1} | 2月(:?ruary){0,1} \ {0,1} | 3月(:CH){0,1} \ {? 0,1} |四月(?:IL){0,1} \ {0,1} | \可能{0,1} |六月:{0,1} \ {0,1(ΔE)。 } |七月(?:Y){0,1} \ {0,1} |八月(:UST?){0,1} \ {0,1} |九月(?:tember){0,1 } \ {0,1} |倍頻程(?:奧伯){0,1} \ {0,1} |十一月(?:燼){0,1} \ {0,1} | DEC(? :餘燼){0,1} \ {0,1})\ S +(\ d {2,4}))|(:(一月(:?。uary){0,1} \ {0,1 } | 2月(?:ruary){0,1} \ {0,1} | 3月:{0,1} \ {0,1} |四月(CH 3)。(?:IL){0,1 } \ {0,1} |。可以\ {0,1} |。君(?: E){0,1} \ {0,1} |七月(:?y)的{0,1} \ {0,1} |八月(:UST){0,1} \ {0,π。 1} | SEP(:tember){0,1} \ {0,1} |十月(?:奧伯){0,1} \ {0,1} |十一月(?:餘燼){0, 1} \ {0,1} |分解(?:餘燼)。{0,1} \ {0,1})\ S +([0-9] {1,2})[\ S,] +( \ d {2,4}))「;
「RegexOptions.Compiled | RegexOptions.IgnoreCase | RegexOptions.IgnorePatternWhitespace」標記。 也,我試圖預編譯的正則表達式,使其更快。
問題是它很慢(在一些文本超過2秒) 有沒有更好和有效的方法來做到這一點?
謝謝
一個簡單的評論,但我會嘗試在那裏正則表達式一個接一個。首先用第一個正則表達式掃描並刪除匹配的單詞,然後運行另一個。根據輸入的字符串,它可能會更快。 – daryal 2012-03-26 11:47:27
'{0,1}'與'?'相同。改變不會加快,但簡化閱讀一下。 – kirilloid 2012-03-26 11:53:45
如果您使用'RegexOptions.ExplicitCapture',它會更快一些,您不必使用這些'(?:)'組。 – 2012-03-26 12:05:33