正则表达式 - 替换数字字符串的一部分

时间:2011-06-13 12:20:42

标签: 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时感到困惑。

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

感谢。

2 个答案:

答案 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}");