正则表达式替换捕获后跟数字

der*_*dex 27 .net regex

我试图让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}其解释为用于替换每个匹配的文字字符序列.

  • 在 Python 中,使用 `\g&lt;1&gt;` 而不是 `\1`。 (3认同)