为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

C#
MMMHUHU 2021-10-24 18:01:03
我正在阅读配置文件的内容,然后尝试解析特定设置: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。我不明白为什么。它似乎与文件中的换行符有关。如果我删除换行符,则换行符不会附加到替换的字符串中。最终捕获组如何匹配最终版本三元组和换行符但排除单引号?
查看完整描述

1 回答

?
PIPIONE

TA贡献1829条经验 获得超9个赞

该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) {

    version = m.Value; 

}

请参阅正则表达式演示。这里,(?<=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) {

    version = m.Groups[1].Value; 

}


查看完整回答
反对 回复 2021-10-24
  • 1 回答
  • 0 关注
  • 199 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信