我有以下情况:
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时感到困惑。
有人能告诉我如何从替换字符串中分隔元素吗?
感谢。
答案 0 :(得分:1)
在您的示例中使用${n}
代替$n
,即${1}
和${3}
:
string result = Regex.Replace(source1, @"([A-Z]{3,})(\?+)([A-Z]{3,})", "${1}" + replacement + "${3}");
答案 1 :(得分:1)
问题是,如果你连接"$1" + replacement + "$3"
,它会给出“$ 1123 $ 3”。正则表达式解析器将尝试替换第1123个捕获组,因此它不会执行任何操作。
如果PHP的约定在您编码的语言中有效(请参阅here),您可以通过将$n
替换引用更改为${n}
来完成您想要的操作,如下所示:
string result =
Regex.Replace( source1, @"([A-Z]{3,})(\?+)([A-Z]{3,})",
"${1}" + replacement + "${3}");