使用Regex.Replace()按变量指定字符数添加空格的正确语法是什么?
解决C#中Regex.Replace使用变量控制每隔n个字符加空格的问题
你遇到的问题很典型——正则表达式字符串是字面量,C#不会自动把字符串里的num识别成你定义的int变量,正则引擎会把{num}当成无效的量词语法(量词需要数字,不是标识符),所以才会报错。
这里有两种简单的方法解决这个问题:
方法1:字符串拼接
把变量的值直接拼接到正则模式字符串中,让正则引擎能拿到实际的数字:
int num = 8; string text = "abcdefghijklmnop"; string result2 = Regex.Replace(text, ".{" + num + "}", "$0 "); // 输出结果:"abcdefgh ijklmnop "
方法2:字符串插值(C# 6及以上版本推荐)
用字符串插值语法更简洁,不过要注意转义大括号——因为字符串插值里的{}是用来包裹变量的,要在正则里保留字面量的{},需要写两个大括号{{}}:
int num = 8; string text = "abcdefghijklmnop"; string result2 = Regex.Replace(text, $".{{{num}}}", "$0 "); // 输出结果和上面一致
补充说明
- 如果
num的值可能为0或者负数,建议先做合法性判断,避免生成无效的正则表达式(比如.{0}会匹配空字符串,导致结果里全是空格)。 - 如果你不想在字符串末尾多一个空格,可以调整正则为匹配除了末尾的n个字符,比如用
(?!$)排除末尾:$".{{{num}}}(?!$)",这样就不会在最后一段后面加空格了。
内容的提问来源于stack exchange,提问作者Emmy
相关产品推荐
相关产品推荐

