我正在使用Regex.Replace
在字符串中每第n
个字符后添加一个空白。我想给一个int变量(字符数),此后应添加空格,但似乎正则表达式没有为int变量正确编写,因此会出现语法错误。
int num = 8;
string text="abcdefghijklmnop"
string result2 = Regex.Replace(text, ".{num}", "$0 "); //not working
此语法有效
string result2 = Regex.Replace(text, ".{8}", "$0 ");
答案 0 :(得分:3)
正则表达式没有按照您想要的方式进行参数化。相反,您只需要适当地构建模式即可。
对于现代C#中的大多数情况,我建议使用插值字符串文字,在这种情况下可以使用,但是需要将{
和}
加倍避免被视为格式说明符。仅使用字符串连接可能更具可读性。因此,您可以使用:
string result = Regex.Replace(text, ".{" + num + "}", "$0 ");
或者如果您愿意{
在相同的文字中具有不同的含义:
string result = Regex.Replace(text, $".{{{num}}}", "$0 ");
答案 1 :(得分:1)
不确定确切想要什么,但是您可以使用字符串串联来构建正则表达式模式:
int num = Int32.Parse(text_num);
string regex = ".{" + num + "}";
string result2 = Regex.Replace(text, regex, "$0 ");
TextArea1_trim_id.InnerText = result2;
对于您的正则表达式模式是有意义还是正确,此答案没有说明。
答案 2 :(得分:1)
替代的 Linq 解决方案(无正则表达式):我们在每个" "
个字符(num
)之后插入c
>
int num = 8;
string text = "abcdefghijklmnop";
// "abcdefgh ijklmnop "
string result2 = string.Concat(text
.Select((c, i) => (i + 1) % num == 0
? c.ToString() + " "
: c.ToString()));
如果我们不想添加 trailing 空格(因此我们想要"abcdefgh ijklmnop"
)
string result2 = string.Concat(text
.Select((c, i) => i < text.Length - 1 && (i + 1) % num == 0
? c.ToString() + " "
: c.ToString()));