Regex.Replace忽略非捕获组

MaY*_*YaN 3 .net c# regex

我有以下代码:

var pattern = @"(?:red).*(\d+)";
var regX = new Regex(pattern);
var input = "this is red with number 111";
var replaced = regX.Replace(input, "666");
Run Code Online (Sandbox Code Playgroud)

replaced则是:this is 666而不是:this is red with number 666

为什么会这样?

Avi*_*Raj 7

你需要使用正面的lookbehind断言正则表达式,因为正则表达式的(?:red).*一部分匹配字符.所以在更换时,所有匹配的字符都被替换了.

var pattern = @"(?<=red.*?)\d+";
var regX = new Regex(pattern);
var input = "this is red with number 111";
var replaced = regX.Replace(input, "666");
Run Code Online (Sandbox Code Playgroud)

要么

使用捕获组.

var pattern = @"(red.*?)\d+";
Run Code Online (Sandbox Code Playgroud)

用+ $1或替换匹配的字符\1666