5

次のような大量のテキストがあります。

....2013 年 3 月 22 日金曜日が 1 日と宣言される可能性があることをアドバイスします.....

その中の DateTime を見つけて解析する必要があります (2013 年 3 月 22 日金曜日)。私はそれを見つけて、DateTime.TryParse を使用してほとんどすべてを取得することができますが、序数の接尾辞 (st、nd、rd、th) にうんざりしています。

TryParse メソッドを呼び出す前にフォーマット文字列を作成するときに、これらのサフィックスを考慮するために使用できるワイルドカード文字はありますか? または他の提案はありますか?

ありがとう!

4

3 に答える 3

2

?を使用して不要な文字を置き換えるのはどうregexですか?

例として、次の正規表現は仕事をするべきです: "(?<=\d)[a-z]{2}".

サンプルコード

string date = "Friday 22nd March 2013";
var r = new Regex(@"(?<=\d)[a-z]{2}");
String result = r.Replace(date, "");
Console.WriteLine(DateTime.Parse(result, CultureInfo.InvariantCulture));

出力:

22/03/2013 00:00:00

これでほとんどの場合に対処できますが、適切にテストするようにしてください。

于 2013-03-21T00:51:20.170 に答える
1

あなたはいつでもブルートフォースすることができます。

注: ルック アンド フィールが同じになるように、Fuji のコードをいくつか借ります。

string date = "Friday 22nd March 2013";
string[] split = date.Split(' ');
string dayOfWeek = split[0]; // throw away & don't need
int day = Convert.ToInt32(split[1].SubString(0, split[1].Length - 2);
int month = 0;
switch (split[2]) {
  case "January": month = 1; break;
  case "February": month = 2; break;
  case "March": month = 3; break;
  case "April": month = 4; break;
  case "May": month = 5; break;
  case "June": month = 6; break;
  case "July": month = 7; break;
  case "August": month = 8; break;
  case "September": month = 9; break;
  case "October": month = 10; break;
  case "November": month = 11; break;
  case "December": month = 12; break;
}
int year = Convert.ToInt32(split[3]);
var dateTime = new DateTime(year, month, day);
Console.WriteLine(dateTime);

100% ではありませんが、「新しい DateTime」コンストラクターが正しくなりました。現在、IDE を実行していません。

于 2013-03-21T02:03:56.410 に答える