我试图让Regex替换正在更新我的AssemblyInfo.cs文件,所以我有:
Regex.Replace(
contents,
@"(\[assembly: Assembly(File)?Version\("").*(""\)\])",
"$1" + version + "$3"
);
Run Code Online (Sandbox Code Playgroud)
问题是version这样的"1.5.3.0",所以当评估替换时它正在看到"$11.5.3.0$3"并且可能正在寻找第11个被捕获的组,因为它出现了:
$11.5.3.0")]
Run Code Online (Sandbox Code Playgroud)
如果在$1它工作正常后粘贴一个空格.如果没有实际插入角色,我需要放在哪里以逃避第二个数字?
pol*_*nts 41
用${1}而不是$1.这也是命名捕获组 的替换语法(?<name>).
这是一个要说明的片段(另见ideone.com):
Console.WriteLine(Regex.Replace("abc", "(.)", "$11")); // $11$11$11
Console.WriteLine(Regex.Replace("abc", "(.)", "${1}1")); // a1b1c1
Console.WriteLine(Regex.Replace("abc", "(?<x>.)", "${x}1")); // a1b1c1
Run Code Online (Sandbox Code Playgroud)
此行为已明确记录:
正则表达式语言元素 - 替换
替换编号组
该
$number语言元素包括由匹配的最后一个子number捕获组中的替换字符串,其中number是捕获组的索引.如果
number未指定正则表达式模式中定义的有效捕获组,则将$number其解释为用于替换每个匹配的文字字符序列.取代指定集团
该
${name}语言元素替代由匹配的最后一个子name捕获基团,其中name是通过所定义的捕获组的名称(?<name>)的语言元素.如果
name未指定正则表达式模式中定义的有效命名捕获组,则将${name}其解释为用于替换每个匹配的文字字符序列.