C# 正则表达式替换追加换行符

我正在阅读配置文件的内容,然后尝试解析特定设置:


var content = File.ReadAllText(PsdFile);

var version = Regex.Replace(content, @"ModuleVersion\s+=\s+'(\d+)\.(\d+)\.(\d+)'", "$1.$2.$3");

我将输入文件设置为:


ModuleVersion = '3.1.11'\r\n

这是VS变量预览。该文件的末尾包含一个空行。执行上述代码后,版本变量包含:


3.1.11\r\n

所以它匹配并正确识别了捕获组,但出于某种原因它附加了\r\n。我不明白为什么。


它似乎与文件中的换行符有关。如果我删除换行符,则换行符不会附加到替换的字符串中。最终捕获组如何匹配最终版本三元组和换行符但排除单引号?


MMMHUHU
浏览 200回答 1
1回答

PIPIONE

该Regex.Replace(content, @"ModuleVersion\s+=\s+'(\d+)\.(\d+)\.(\d+)'", "$1.$2.$3")行代码对ModuleVersion\s+=\s+'(\d+)\.(\d+)\.(\d+)'模式执行正则表达式搜索,即搜索ModuleVersion, 1+ 个空格, =, 1+ 个空格, ',然后将 1+ 个数字捕获到 Group 1 中,然后匹配一个点,然后将 1+ 个数字捕获到第 2 组,再次匹配一个点并将另外 1+ 个数字放入第 3 组并匹配一个'字符,然后将整个匹配替换为第 1 组值.、第 2 组值.和第 3 组值。因此,如您所见,这对换行符没有任何作用,并且捕获这 3 个组毫无意义,因为您仍然使用点作为分隔符。你似乎正在做的是提取一个值。使用Regex.Match提取单件的文本:var version = "";var m = Regex.Match(content, @"(?<=ModuleVersion\s+=\s+')\d+(?:\.\d+)+");if (m.Success) {&nbsp; &nbsp; version = m.Value;&nbsp;}请参阅正则表达式演示。这里,(?<=ModuleVersion\s+=\s+')是一个需要ModuleVersion, 1+ 空格, =, 1+ 空格并'立即出现在当前位置左侧的后视。请注意,您也可以使用捕获方法并从match.Groups[1].Value以下位置获取结果:var version = "";var m = Regex.Match(content, @"ModuleVersion\s+=\s+'(\d+(?:\.\d+)+)");if (m.Success) {&nbsp; &nbsp; version = m.Groups[1].Value;&nbsp;}
打开App,查看更多内容
随时随地看视频慕课网APP