2017-03-07 5 views
0

C#での日付と変更形式を検索します。今私は、データを正しく使用する前に、ファイル内の複数のものを置き換える必要があります。私はテキストをRegexに置き換えました。しかし、今私は日付を変更する必要があります。しかし、私はそれを行う方法を理解することはできません。私は別のデータのテキストファイルを持っている

日は、次のようになります。"utc": "2017-10-02 19:55:00.205263000 Z" そして私は、この日付フォーマットのすべての出現箇所のため、この結果を取得したい:それは

string pattern = @"{0:yyyy-mm-dd hh:mm:ss.fff Z}"; 
string replacement = "{0:yyyy-mm-dd hh:mm:ss"; 
Regex rgx = new Regex(pattern); 
string result = rgx.Replace(theInputTextFile, replacement); 

です: "utc": "2017-10-02 19:55:00"

は、私は次のコードを使用してみました正規表現で日付書式を使用することはできません。または私のコードで間違いを犯しましたか?

I used the information from here, for the date formats

+0

あなたは正規表現エンジンは、D/M/Yなどは、日付/時刻の指標であることを認識していない疑いがあるとして - 彼らは唯一の書式設定のためのものです。単純 'の\ D {4} - \ dは{2}' '、完全な厳密一致の4桁-2digits' ...' TryParseExact() '再フォーマットに一致します。 –

答えて

3

あなたはその形式を変換できるように、実際にあなたはRegex.Replaceメソッドにデリゲートを与えることができます。 このページでは例を調べます https://msdn.microsoft.com/en-us/library/cft8645c(v=vs.110).aspx

のサンプルコードは、あなたが質問に書いたようにフォーマットされた日付を検索し、新しいフォーマットで置き換えた、以下の通りです:

class Program 
{ 
    static void Main() 
    { 
     string text = " dasd arew 2017-03-11 12:25:56.345 Z 2017-03-11 12:25:56.345 Z das tfgwe 2017-03-11 12:25:56.345 Z"; 
     string pattern = @"\d{4}\-\d{2}\-\d{2}\s\d{2}\:\d{2}\:\d{2}\.\d{3}\sZ"; 
     Regex r = new Regex(pattern); 
     var res = r.Replace(text, new MatchEvaluator(ConvertDateFormat)); 
     Console.WriteLine(res); 
    } 

    static string ConvertDateFormat(Match m) 
    { 
     var mydate = DateTime.Parse(m.Value); 
     return mydate.ToString("yyyy-MM-dd hh:mm:ss"); 
    } 

} 
+0

これは、最初に正しく一致したと仮定しています。 –

+0

@MattJohnsonあなたは正しいです。私はそう思った。コードサンプルに正しい正規表現パターンを追加しました –

+0

はい、これは動作します。どうもありがとうございました。 –

0

がそれです正しい

正規表現での日付フォーマットを使用することはできません。それは不可能。正規表現と日付書式/解析トークンは、無関係な2つの概念です。特定のテキストと一致する必要があります。日付パーサの内部には、このような目標を達成するために、正規表現を使用する場合がありますが、一つは、単にRegexクラスにyyyyを渡し、それが2017を見つけることを期待することはできません。それには\d{4}のようなものを使用しなければならず、それは4つの連続する数字を捕まえることになります。

はまた、その日付の書式トークンの点に注意してください。大文字と小文字が区別され、あなたは数ヶ月で数分(mm)を混同しました(MM)と午前せずに代わりに24時間の時間(HH)の12時間の時間(hh)を使用します/ pmのインジケータ(tt) - ではないあなたが正規表現に渡すので、それはとにかく、ここでは問題であろうと。

関連する問題