正则表达式替换前缀字符串

Regex to replace a prefix string

我想用一个本身后跟一个点的子字符串替换它,当它是一个较长序列的开始时(即它是一个前缀)。例如给定字符串:

"'abc' 'xyzabcdef' 'abcdef'"

我想将前缀abc转换成abc.,得到:

"'abc' 'xyzabcdef' 'abc.def'"

请注意 abc 的独立字符串未进行转换。

我试过这个代码:

var input = @"'abc' 'xyzabcdef' 'abcdef'";
var result = Regex.Replace(input, @"\b(abc)\w+", @".");
Console.WriteLine(result);

给出:

'abc' 'xyzabcdef' 'abc.'

请注意,在第三个输出中,结尾的 def 也被替换了。我预计 </code> 的替换只会与组 <code>(abc) 相关联,但它显然与整个模式匹配。我正在寻找 Regex.Replace() 调用的正确表述。

尝试替换正则表达式模式 (?<=')abc(?=\w)。此模式表示匹配:

(?<=')  assert that single quote precedes
abc     match and consume abc
(?=\w)  assert that at least one word character follows
var input = @"'abc' 'xyzabcdef' 'abcdef'";
var result = Regex.Replace(input, @"(?<=')abc(?=\w)", @"abc.");
Console.WriteLine(result);  // 'abc' 'xyzabcdef' 'abc.def'