11

私は、2 つの異なる形式のファイルを読み込んでいるプロジェクトに取り組んでいます。1 つは日付と時刻を含み、もう 1 つは含まない形式です。

最初の行を読むとき、文字列に日付と時刻が含まれているかどうかを確認し、ファイルを読み取り、チェックに基づいて特定の方法でファイルを読み取る必要があります。

これはある種の正規表現になると思いますが、どこから始めればよいかわからず、関連するものが見つかりません。

ご協力いただきありがとうございます。

更新 私が求めていることについて、私はあまり明確ではないと思います。ログ ファイルを 1 行ずつ読み取ると、次のような行が表示される場合があります。

Col1   Col2  Col3  Col4  Col5 

時々、行が次のようになることがあります

Col1  17-02-2013 02:05:00 Col2  Col3  Col4  Col5

行を読んだら、文字列内に日付と時刻の文字列が含まれているかどうかを確認する必要があります。

4

5 に答える 5

20

日付の形式が定義されている場合は、正規表現を使用して解決できます。

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Text.RegularExpressions;

namespace RegTest
{
    class Program
    {
        static void Main(string[] args)
        {
            string testDate = "3214312402-17-2013143214214";
            Regex rgx = new Regex(@"\d{2}-\d{2}-\d{4}");
            Match mat = rgx.Match(testDate);
            Console.WriteLine(mat.ToString());
            Console.ReadLine();
        }
    }
}
于 2013-02-17T05:55:25.553 に答える
5

更新 2 : DateTime.TryParseExact を使用することは、正規表現を使用するよりもはるかに優れた方法であることがわかりました

DateTime myDate;
if (DateTime.TryParseExact(inputString, "dd-MM-yyyy hh:mm:ss", 
    CultureInfo.InvariantCulture, DateTimeStyles.None, out myDate))
{
    //String has Date and Time
}
else
{
    //String has only Date Portion    
}
于 2013-02-17T01:49:10.983 に答える
2
   string s = " Subject: Current account balances for 21st December 2017 and 2nd January 2019 mnmnm ";//here is u r sample string

   s = s.ToLower();
   string newStrstr = Regex.Replace(s, " {2,}", " ");//remove more than whitespace
   string newst = Regex.Replace(newStrstr, @"([\s+][-/./_///://|/$/\s+]|[-/./_///://|/$/\s+][\s+])", "/");// remove unwanted whitespace eg 21 -dec- 2017 to 21-07-2017
   newStrstr = newst.Trim();
   Regex rx = new Regex(@"(st|nd|th|rd)");//21st-01-2017 to 21-01-2017
   string sp = rx.Replace(newStrstr, "");
   rx = new Regex(@"(([0-2][0-9]|[3][0-1]|[0-9])[-/./_///://|/$/\s+]([0][0-9]|[0-9]|[1][0-2]|jan|feb|mar|apr|may|jun|jul|aug|sep|oct|nov|dec|january|february|march|april|may|june|july|augu|september|october|november|december)[-/./_///:/|/$/\s+][0-9]{2,4})");//a pattern for regex to check date format. For August we check Augu since we replaced the st earlier
   MatchCollection mc = rx.Matches(sp);//look for strings that satisfy the above pattern regex

   List<DateTime> dates=new List<DateTime>(); //Create a list to store the detected dates

   foreach(Match m in mc)
   {
        string s2=Regex.Replace(m.ToString(), "augu", "august");
        dates.Add(DateTime.Parse(s2);
   }
于 2017-12-11T06:00:24.680 に答える
-2

このメソッドを使用して、文字列が日付かどうかを確認します。

private bool CheckDate(String date)
{
    try
    {
        DateTime dt = DateTime.Parse(date);
        return true;
    }
    catch
    {
        return false;
    }
}
于 2015-09-30T16:50:05.477 に答える
-3

これは私たちのために働いた:

文字列値が有効な日時値である場合、例外は発生しません。

try
{
    Convert.ToDateTime(string_value).ToString("MM/dd/yyyy");
}

文字列値が無効な日時値である場合、例外が発生します。

catch (Exception)
{
}
于 2013-09-11T16:07:31.970 に答える