文字列内のすべての日付を見つけるためのC#の高速な方法を探しています(文字列は大文字で、約200,000種類の文字列をスキャンします)。日付を文字列で検索する
私はこの正規表現を使用しています(日付を書くためのほとんどすべての方法を網羅しています)、日付を書く方法がたくさんあるので(例:31/12/2012または2012年12月31日など)
列findDates =「 - |(((\ dの{1,4})/.- /?):(\ S \ dの{1,2})\ S +(1月( {0,1} | {0,1} | {0,1} | {0,1} | {0,1} {0,1} | apr(?:il){0,1} \。{0,1} | may \。{0,1} | jun(?:e){0,1} \。{0,1 {0,1} | {0,1} | aug(?:ust){0,1} \。{0,1} | sep(?:tember){0,1} {0,1} | {0,1} | {0,1} | {0,1} | {0,1} | {0,1} {0,1} \。{0,1})\ s +(\ d {2,4}))|(?(jan(?:uary){0,1} \。{0,1 {0,1} | apr(?:il){0,1} {0,1} | {0,1} } \。{0,1} | may \。{0,1} | jun(?:) {0,1} |。{0,1} \。{0,1} | jul(?:y){0,1} \。{0,1} | aug(?:ust){0,1} \。{0、 {0,1} | {0,1} | {0,1} | sep(?:tember){0,1} \ {0,1} {\ s、] +({0,1}){ \ d {2,4})) ";
"RegexOptions.Compiled | RegexOptions.IgnoreCase | RegexOptions.IgnorePatternWhitespace"タグを使用します。 また、正規表現をあらかじめコンパイルして、それをさらに高速化しようとしました。
問題は非常に遅いです(一部のテキストでは2秒以上) これを行うには効率的な方法がありますか?
ありがとう
簡単なコメントですが、私は正規表現を1つずつ試してみます。まず、最初の正規表現でスキャンし、一致する単語を削除してから、もう一方の正規表現を実行します。入力文字列に応じてより速くなる場合があります。 – daryal
'{0,1}'は '?'と同じです。変更はスピードアップされませんが、少し読んだだけで簡単に変更できます。 – kirilloid
'RegexOptions.ExplicitCapture'を使うと少し速くなり、'(?:) 'グループを使う必要はありません。 –