2013-02-17 12 views
6

Ich arbeite an einem Projekt, in dem ich in einer Datei lese, die in zwei verschiedenen Formaten kommen könnte, eines enthält ein Datum und eine Uhrzeit und das andere nicht.Finden, ob ein String ein Datum und eine Uhrzeit enthält

Wenn ich in der ersten Zeile lese muss ich überprüfen, ob die Zeichenfolge das Datum und die Uhrzeit enthält oder nicht und die Datei lesen und basierend auf dem Scheck die Datei in einer bestimmten Weise lesen.

Ich vermute, das wäre eine Art von regulären Ausdruck, aber habe keine Ahnung, wo ich anfangen soll und kann nichts Relevantes finden.

Vielen Dank für Ihre Hilfe.

UPDATE Ich glaube nicht, dass ich sehr klar bin, was ich verlange. Wenn ich die Log-Datei Zeile für Zeile lesen kann die Linie kommen als:

Col1 Col2 Col3 Col4 Col5 

Manchmal kann die Linie kommen in als

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

Wenn ich die Zeile las ich einen Scheck tun müssen, ob es ist eine Zeichenfolge für Datum und Uhrzeit, die in der Zeichenfolge enthalten ist.

+0

Können Sie teilen das, was Sie versucht haben? – spajce

+0

@Bretty: wissen Sie genau, in welchem ​​Datetime-Format diese potenziellen Daten dargestellt werden? TT-MM-JJJJ hh: mm: ss immer? –

+0

@ bob-the-destroyer Es sollte immer im Format von TT-mm hh: mm: ss sein. Ich denke nicht, dass sich das Format ändert (beachten Sie, dass das Jahr nicht enthalten ist). Ich vergaß zu erwähnen, dass früher – Boardy

Antwort

11

Wenn das Format des Datums definiert wurde verwenden, können Sie Regex es lösen können.

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(); 
     } 
    } 
} 
+0

verwenden Ich verbesserte die Regex Beispiele ein wenig – amhed

+0

Vielen Dank für Ihre Hilfe, sehr geschätzt. – Boardy

5

Update 2: Gefunden DateTime.TryParseExact mit out ist eine viel bessere Möglichkeit, dass Regex Ausdrücke

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  
} 
+0

Ich denke, das OP möchte nach einem Datum und einer Uhrzeit suchen :) – scartag

+0

@scartag: wenn xdatetime == DateTime.MinValue, bedeutet es der Versuch ist fehlgeschlagen. Zum Glück, wenn 'DateTime.TryParse (x)' fehlgeschlagen ist, gibt es false zurück, so dass Sie sich nicht um diese minvalue-Prüfung kümmern müssen. –

+0

Wenn TryParse fehlschlägt, bleiben die DateTime-Objekte mit dem Standardwert (DateTime.MinValue). – amhed

-2

Dies war für uns:

Wenn der String-Wert ein gültiger Datetime-Wert ist, dann wird es keine Ausnahme geben:

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

Wenn der String-Wert ein ungültiger Datetime-Wert, dann gibt es eine Ausnahme:

catch (Exception) 
{ 
} 
+0

Obwohl der Code geschätzt wird, sollte er immer eine begleitende Erklärung enthalten. Das muss nicht lange dauern, aber es wird erwartet. – peterh

+0

@peterh - Aktualisierter Beitrag. – xameeramir

+0

Ich verstehe dich nicht wirklich, wenn du es auf einem Weg getan hättest, der meine Nachbesserungen nicht benötigt, hättest du eine Verbesserung von mir bekommen. – peterh

-2

Mit dieser Methode überprüfen, ob Zeichenfolge Datum ist oder nicht:

private bool CheckDate(String date) 
{ 
    try 
    { 
     DateTime dt = DateTime.Parse(date); 
     return true; 
    } 
    catch 
    { 
     return false; 
    } 
} 
+2

Obwohl der Code geschätzt wird, sollte er immer eine begleitende Erklärung enthalten. Das muss nicht lange dauern, aber es wird erwartet. – peterh

+0

Ich habe Ihren Rat notiert. Danke –

0
string s = "Subject: Current account balances for 21st December 2017 
    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|august|september|october|november|december)[-/./_///:/|/$/\s+][0-9]{2,4})");//a pattern for regex to check date format 
      Match m = rx.Match(sp);//look for string satisfy the above pattern regex 
      s = m.ToString();//convert matching data to string 


     DateTime st = Convert.ToDateTime(s);//converting that data 
+0

Dies wird Datum von einer Zeichenfolge in jeder Bedingung –

+0

Look oben Code mehr erklärt. –

Verwandte Themen