2017-04-18 7 views
1

Ich habe eine Zeichenfolge wie: "07/04/2017 16:09:03 von Joe Bloggs) Hinzugefügt 07.04.2017 17.03.04 von Joe Bloggs) Aktualisiert "Regex Split, während der Begrenzer C#

Ich möchte die Zeichenfolge in eine Liste von Kommentaren teilen. Das obige Beispiel enthält zwei separate Kommentare, die ich in eine Liste aufteilen möchte. Ich habe festgestellt, dass jeder neue Kommentar mit einem Datum beginnt. Also ID für jedes Datum, um die Zeichenfolge zu teilen.

I versucht hat folgendes RegexMuster '\ d {1,2} \/\ d {1,2} \/\ d {4}' welches das Datum erkennt, zu verwenden.

var sqlComments = "07/04/2017 16:09:03 by Joe Bloggs) Added 07/04/2017 17:03:04 by Joe Bloggs) Updated" 
var comments = Regex.Split(sqlComments, RegexDateIdentifier); 
return comments.Where(c => c != string.Empty).ToList(); 

Allerdings teilt der Code oben, teilt die Zeichenfolge, wie ich möchte, aber das Datum entfernt. So bin ich gleich geblieben;

  1. 16:09:03 von Joe Bloggs) Hinzugefügt
  2. 17:03:04 von Joe Bloggs) Aktualisiert

Kann jemand raten, wie die oben durchzuführen, aber mit dem neuesten Stand zu halten (die Begrenzer)?

+0

Haben Sie eine Suche um für Informationen über Look-Ahead-Behauptungen - sie sollten Sie auf „Raum geteilt helfen, die gefolgt wird durch ein Datum "das aussieht wie du willst. Überprüfen Sie auch, ob sich das Datumsformat nicht ändert (z. B. nach ISO 8601). –

Antwort

1

Dies sollte tun, was Sie nach, verwendet er ein Zero-Width Positive Lookahead Assertion plus eine \s+ die Räume zu entfernen:

static void Main(string[] args) 
    { 
     string RegexDateIdentifier = @"\s+(?=\d{1,2}\/\d{1,2}\/\d{4})"; 
     var sqlComments = "07/04/2017 16:09:03 by Joe Bloggs) Added 07/04/2017 17:03:04 by Joe Bloggs) Updated"; 
     var comments = Regex.Split(sqlComments, RegexDateIdentifier); 
     var list = comments.ToList(); 

     foreach (var s in list) 
     { 
      Console.WriteLine("|{0}|", s); 
     } 
    } 
+0

Das hat den Job gemacht! – HelloAmigo