无法让Messagebox显示List

时间:2016-09-01 04:20:04

标签: c# list

我正在尝试显示MessageBox,显示我的C#程序中的更改日志

这是文本文件。

  

当前版本0.2.3.4

     

添加了哈希解码器

     

尝试将代码更改为OOP设计

     

使用ReSharper清理随机代码

     

版本0.1.3.4 - 2016年8月29日

     

此点之前没有更改日志

目标是在Current Version 0.2.3.4Version 0.1.3.4 - 8/29/2016

之间获取文字

我已尝试使用下面的代码执行此操作

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);

我遇到的问题是changeLogString只显示Added Hash decoder而没有其他内容。

关于我做错的任何想法?

1 个答案:

答案 0 :(得分:1)

在您的情况下,changeLogCount始终为1.因此changeLogList始终changeLogInfo.Groups[1].Captures[0].ToString()指的是Added Hash decoder字符串。

您正在检查"Current Version\\s.*?\\n((.*?\\n)+)Version\\s.*?\\s\\-\\s\\d"正则表达式,它匹配整个字符串并匹配1次。但第一组(.*?\\n)匹配3次。所以,如果你要检查完整正则表达式的匹配数量 - 你将得到1,如果你想获得第一组的捕获数量 - 你将得到3。

因此,您应该按以下方式修复代码:

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);

请注意,您无需迭代捕获 - 所需的字符串将存储在changeLogString中。