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());