不能让Messagebox显示列表

本文关键字:列表 显示 Messagebox 不能 | 更新日期: 2023-09-27 18:04:57

我试图有一个MessageBox出现,显示更改日志在我的c#程序

这是文本文件

当前版本0.2.3.4

添加哈希解码器

试图将代码更改为OOP设计

使用ReSharper清理随机代码

Version 0.1.3.4 - 8/29/2016

在此点之前没有更改日志

目标是获得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而没有其他。

你知道我做错了什么吗?

不能让Messagebox显示列表

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

您正在检查"Current Version''s.*?''n((.*?''n)+)Version''s.*?''s''-''s''d" regex,它匹配整个字符串并匹配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中。