4

次のような任意の形式の日付に一致する正規表現は次のとおりです。

26FEB2009
31DEC2009

27 Mar 2008
30 Jul 2009

26-Feb-2009
27-Aug-2009

29/05/2008

07.11.2008

Jan 11 2008
May 26 2008

そのための正規表現は何ですか?

26-Feb-2009 および26 FEB 2009と一致するが26FEB2009と一致しない正規表現 があります。したがって、誰かが知っている場合は、更新してください。

(?:^|[^\d\w:])(?'day'\d{1,2})(?:-?st\s+|-?th\s+|-?rd\s+|-?nd\s+|-|\s+)(?'month'Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec)[uarychilestmbro]*(?:\s*,?\s*|-)(?:'?(?'year'\d{2})|(?'year'\d{4}))(?=$|[^\d\w])

日付 26FEB2009 はFUTIDX 26FEB2009 NIFTY 0のような他の文字列の部分文字列であり、html ページから解析されるため、空白や区切り文字を設定できません。

4

2 に答える 2

4

日付の解析に正規表現を使用しないこと、さらには HTML の解析に正規表現を使用しないことを強くお勧めします。日付の解析にはTryParseExactメソッドを参照し、HTML の解析にはHtml Agility Packなどの DOM パーサーを参照してください。

var dateStr = "26FEB2009";
var formats = new[] 
{ 
    "ddMMMyyyy", "dd MMM yyyy", "dd/MM/yyyy"
};
DateTime date;
if (DateTime.TryParseExact(
    dateStr, 
    formats, 
    CultureInfo.InvariantCulture, 
    DateTimeStyles.NoCurrentDateDefault, 
    out date))
{
    // You have a match, use the date object
}
于 2010-05-10T06:08:46.593 に答える
1

2009年2月26日ではなく2009年2月26日と一致する場合は、各日付セグメント間の空白と区切り文字("-"および"/")をオプションにする必要があるようです。

+メタ文字は1つ以上を指定します。空白には、*(ゼロ以上)を使用することを検討してください。

編集

つまり、正規表現が日付を空白/区切り文字と一致させているが、どちらかがない日付と一致していない場合、つまり26FEB2009の場合、空白/区切り文字を一致させるために必須であると指定しているように聞こえます。 。

これが私がすぐに一緒にノックしたものです:

(\d{1,2})(\/|-|\s*)?((Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec)|\d{2})(\/|-|\s*)?(\d{4})

必要な特定の機能が欠落していないことを確認することもできますが、すべての例と一致します。

于 2010-05-08T12:47:52.197 に答える