使用regex.replace()在指定数量的字符后添加空格的正确语法是什么?

时间:2019-04-19 07:05:48

标签: c# string

我正在使用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 ");

3 个答案:

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