我正在尝试使用正则表达式替换来更新我的AssemblyInfo.cs文件,所以我有:
Regex.Replace(
contents,
@"(\[assembly: Assembly(File)?Version\("").*(""\)\])",
"$1" + version + "$3"
);
问题是version
类似于"1.5.3.0"
,因此当评估替换时,它会看到"$11.5.3.0$3"
并且可能正在寻找第11个被捕获的组,因为它正在出现用:
$11.5.3.0")]
如果在$1
之后粘贴一个空格,它就能正常工作。如果没有实际插入角色,我需要放在哪里以逃避第二个数字?
答案 0 :(得分:38)
使用${1}
代替$1
。这也是名为capturing group (?<name>)
的替换语法。
这是一个用来说明(see also on 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
此行为已明确记录:
Regular Expression Language Elements - Substitutions
Substituting a Numbered Group
$number
语言元素包含替换字符串中number
捕获组匹配的最后一个子字符串,其中number
是捕获组的索引。如果
number
未指定正则表达式模式中定义的有效捕获组,则$number
将被解释为用于替换每个匹配的文字字符序列。Substituting a Named Group
${name}
语言元素替换name
捕获组匹配的最后一个子字符串,其中name
是(?<name>)
语言元素定义的捕获组的名称。如果
name
未指定正则表达式模式中定义的有效命名捕获组,则${name}
将被解释为用于替换每个匹配项的文字字符序列