C# 正则表达式在"$1"后追加数字


extern const BP_UINT8 g_SysMapDis_<DIST_N>[];

我想将"DIST_N"替换为"0"或"1",例如:

extern const BP_UINT8 g_SysMapDis_0[];

所以我做这样的事情

    Regex REGEX_CODE_BLOCK_DIST_N = new Regex(@"(.+)(<DIST_N>)(.+)");
    int n = 0;
    string codeBlock = "extern const BP_UINT8 g_SysMapDis_<DIST_N>[];";
    string ret += REGEX_CODE_BLOCK_DIST_N.Replace(codeBlock, "$1" + n + "$3");

我只得到这个

$10[];// should be "extern const BP_UINT8 g_SysMapDis_0[];"

那么如何在"$1"之后附加一个数字呢?

在这个简单的情况下,您可以使用字符串替换而不是正则表达式:

string codeBlock = "extern const BP_UINT8 g_SysMapDis_<DIST_N>[];";
string ret = codeBlock.Replace("<DIST_N>", "0");

特别是在您的情况下,您的正则表达式替换字符串被"$1" + n,其值为 "$10" - 因此它最终寻找 10 组。解决方案是改用"${1}0",将组与以下"0"分开。例如:

var s = Regex.Replace("123abc",@"(.)","${1}0");

另请参阅:

  • 工作示例
  • Microsoft文档 - 正则表达式中的替换

您的正则表达式需要遵循,因为这是您尝试替换的字符串。

"(<DIST_N>)"

完整代码

Regex REGEX_CODE_BLOCK_DIST_N = new Regex(@"(<DIST_N>)");
int n = 0;
string codeBlock = "extern const BP_UINT8 g_SysMapDis_<DIST_N>[];";
string ret = REGEX_CODE_BLOCK_DIST_N.Replace(codeBlock,  n.ToString() );

输出

extern const BP_UINT8 g_SysMapDis_0[];

附加评论

请注意,您可以使用更简单的字符串。在这种情况下替换,而不是使用正则表达式。

string ret = codeBlock.Replace("<DIST_N>",  n.ToString());

最新更新