我正在尝试显示MessageBox
,显示我的C#程序中的更改日志
这是文本文件。
当前版本0.2.3.4
添加了哈希解码器
尝试将代码更改为OOP设计
使用ReSharper清理随机代码
版本0.1.3.4 - 2016年8月29日
此点之前没有更改日志
目标是在Current Version 0.2.3.4
和Version 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
而没有其他内容。
关于我做错的任何想法?
答案 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
中。