Regex-替换数字字符串的一部分

Regex-替换数字字符串的一部分,regex,Regex,我有以下情况: string source1 "ABC?XYZ"; string source2 "DEF?PQR"; string replacement = "123" string result = Regex.Replace(source1, @"([A-Z]{3,})(\?+)([A-Z]{3,})", "$1" + replacement + "$3"); 当然,问题是替换字符串扩展为“S1123$3”,这会在解析器试图查找$1123时混淆解析器 有人能告诉我如何从替换字符串中分隔

我有以下情况:

string source1 "ABC?XYZ";
string source2 "DEF?PQR";
string replacement = "123"
string result = Regex.Replace(source1, @"([A-Z]{3,})(\?+)([A-Z]{3,})", "$1" + replacement + "$3");
当然,问题是替换字符串扩展为“S1123$3”,这会在解析器试图查找$1123时混淆解析器

有人能告诉我如何从替换字符串中分隔元素吗


谢谢。

使用
${n}
而不是
$n
,即在您的示例中使用
${1}
${3}

string result = Regex.Replace(source1, @"([A-Z]{3,})(\?+)([A-Z]{3,})", "${1}" + replacement + "${3}");

问题是,如果将
“$1”+替换+“$3”
”连接起来,则会得到“$1123$3”。正则表达式解析器将尝试替换1123捕获组,因此它不会做任何事情

如果PHP的约定在您编写的语言中是有效的(请参阅),那么您可以通过将
$n
替换引用更改为
${n}
来实现您想要的,如下所示:

string result = 
  Regex.Replace( source1, @"([A-Z]{3,})(\?+)([A-Z]{3,})",
                 "${1}" + replacement + "${3}");