2016-09-01 2 views
0

ich habe ich versucht, ein MessageBox erscheinen, dass das Changelog in meinem C# Programm zeigtKann nicht erhalten Messagebox Liste anzuzeigen

Dies ist die Textdatei.

Aktuelle Version 0.2.3.4

Added Hash-Decoder

Versuchte Code in OOP-Design mit ReSharper

Version 0.1.3.4

Aufgeräumt Random-Code zu ändern - 8/29/2016

Keine Änderungsprotokolle vor diesem Punkt

Das Ziel ist, den Text zwischen Current Version 0.2.3.4 und Version 0.1.3.4 - 8/29/2016

ich zu bekommen habe versucht hatte dies unter

mit dem Code tun
Regex changeLogMatch = new Regex("Current Version\\s.*?\\n(.*?\\n)+Version\\s.*?\\s\\-\\s\\d"); 
Match changeLogInfo = changeLogMatch.Match(changeLog); 
int changeLogCount = Regex.Matches(changeLog, "Current Version\\s.*?\\n(.*?\\n)+Version\\s.*?\\s\\-\\s\\d").Count; 
List<string> changeLogList = new List<string>(); 
for (int i = 0; i < changeLogCount; i++) 
{ 
    changeLogList.Add(changeLogInfo.Groups[1].Captures[i].ToString()); 
} 
string changeLogString = string.Join(Environment.NewLine, changeLogList); 
Console.WriteLine(changeLogString); 
MessageBox.Show("New Changes" + Environment.NewLine + changeLogString 
       , "New Version Found: " + newVersion); 

Das Problem, das ich habe, ist, dass changeLogString nur angezeigt, Added Hash decoder und sonst nichts.

Irgendwelche Ideen, was ich falsch mache?

Antwort

1

In Ihrem Fall changeLogCount immer 1 in changeLogList Also wird immer changeLogInfo.Groups[1].Captures[0].ToString() was Added Hash decoder String bezieht.

Sie suchen nach "Current Version\\s.*?\\n((.*?\\n)+)Version\\s.*?\\s\\-\\s\\d" Regex, es entspricht der gesamten Zeichenfolge und entspricht 1 Mal. Aber die erste Gruppe (.*?\\n) entspricht 3 mal. Also, wenn Sie auf die Anzahl der Übereinstimmungen der vollen Regex überprüfen - Sie erhalten 1, wenn Sie die Anzahl der Captures der ersten Gruppe erhalten möchten - erhalten Sie 3.

So sollten Sie Ihren Code auf folgende Weise beheben :

Regex changeLogMatch = new Regex("Current Version\\s.*?\\n(.*?\\n)+Version\\s.*?\\s\\-\\s\\d"); 
Match changeLogInfo = changeLogMatch.Match(changeLog); 

string changeLogString = string.Join(Environment.NewLine, changeLogInfo.Groups[1].Captures.OfType<Capture>()); 
Console.WriteLine(changeLogString); 

Beachten Sie, dass Sie keine Notwendigkeit, durch Aufnahmen zu durchlaufen haben - die erforderliche Zeichenfolge wird in changeLogString gespeichert werden.