2016-11-02 2 views
0

Kurz gesagt, was ich versuche, der folgende Test erfolgreichkorrekte Regex wie Datum mal aus Ausdruck zu extrahieren dieser

[TestMethod] 
    public void DateTimeFormatTest() 
    { 
     string text = "jose23 (11/1/2016 11:27pm, 8 posts)"; 
     var matches = BoardScanner.DateTimeFormat.Matches(text); 
     Assert.AreEqual(matches.Count, 1, String.Format("Couldn't extract date from {0} using DateTimeFormat", text)); 
     var match = matches[0]; 
     try 
     { 
      DateTime.Parse(match.Value); 
     } 
     catch(FormatException) 
     { 
      Assert.Fail("Couldn't convert {0} to DateTime object", match.Value); 
     } 
    } 

Die Regex Ich verwende ist

new Regex(@"\d{2,2}/\d{2,2}/\d{4,4} \d{2,2}:\d{2,2}/^(am|pm|AM|PM)") 
zu tun ist, machen

und offensichtlich nicht funktioniert

+0

'String dtprt = text.Split ('(') [1] .ToString() Split ('') [0 ] .ToString(); 'kann auch Ihr Datum ziehen, wenn das Muster immer gleich ist. Wenn das Datum immer zwischen' ('' '' '' '' ' –

Antwort

0

Es funktioniert nicht, weil:

  • Schrägstriche müssen in Regex mit einem umgekehrten Schrägstrich versehen werden.
  • Monat und Tag können entweder 1 oder 2 Ziffern sein, aber Sie suchen explizit genau 2 Ziffern in diesen Bereichen.
  • Das Zeichen ^ stellt den Anfang der Zeichenfolge dar, sodass es in der Mitte des Musters dazu führt, dass Ihre Übereinstimmung fehlschlägt, unabhängig davon, was Sie überprüfen (abhängig von Ihren Flags).

Das folgende Muster für die Eingabe funktioniert Ihnen zur Verfügung gestellten.

\d{1,2}\/\d{1,2}\/\d{4} \d{1,2}:\d{2}(am|pm|AM|PM) 
+0

liegt. Ist es eine Möglichkeit für mich, eine Groß-/Kleinschreibung zu beachten als Schreiben am | pm | AM | PM? –

+0

@DeadlyNicotine Sie können das 'i'-Flag verwenden, um bei der Regex-Suche die Groß- und Kleinschreibung zu ignorieren. – Abion47

Verwandte Themen