首页 > 解决方案 > 将字符串转换为给定的正则表达式模式

问题描述

如何将 转换string给定的模式。考虑模式可以是任何东西。

例子:

注意:输入字符串的长度可能会有所不同。

我试过了

Console.WriteLine(Regex.Replace("1235645847", ".{1,4}", "$&-").TrimEnd('-'));

但它不是动态的,它仅适用于第一个模式

有可能实现这一目标吗?任何帮助表示赞赏。

标签: c#regexstring

解决方案


如前所述,这个问题与正则表达式没有任何共同之处。好吧,除了模式,但你在不同的上下文中使用它。你只需要格式化一些字符串,使用一些模式。

例如,您可以使用此功能:

public string ConvertToFormat(string strToFormat, string pattern)
{
  if (pattern.Count(c => c == 'X') != strToFormat.Length)
    throw new ArgumentException("Number of placeholders in pattern is different from number of characters in the input string!");
  StringBuilder sb = new StringBuilder();
  int j = 0;
  for(int i = 0; i < pattern.Length; i++)
    if (pattern[i] == 'X')
    {
      sb.Append(strToFormat[j]);
      j++;
    }
    else
      sb.Append(pattern[i]);

  return sb.ToString();
}

并像这样使用:

string result = ConvertToFormat("1234567890", "XXXX-XXXX-XX");
result = ConvertToFormat("1234567890", "XXX-XXX-XXX-X");
result = ConvertToFormat("1234567890", "XXX=XXX=XXX=X");

更新

正则表达式的动态解决方案:

public string RegexConvertToFormat(string strToFormat, int blockSize, char separator)
{
  return Regex.Replace("1235645847", ".{" + blockSize + "}" , "$&" + separator).TrimEnd(separator);
}

用法:

string s = RegexConvertToFormat("1234567890", 4, '-');
s = RegexConvertToFormat("1234567890", 3, '-');
s = RegexConvertToFormat("1234567890", 3, '=');

推荐阅读