c# - 将字符串转换为给定的正则表达式模式
问题描述
如何将 转换string
为给定的模式。考虑模式可以是任何东西。
例子:
- 输入字符串是 -
1234567890
- 对于模式
XXXX-XXXX-XX
然后输出是 -1234-5678-90
- 对于模式
XXX-XXX-XXX-X
然后输出是 -123-456-789-0
- 对于模式
XXX=XXX=XXX=X
然后输出是 -123=456=789=0
- 对于模式
XX-XXX-X-XXXX
然后输出是 -12-345-6-7890
注意:输入字符串的长度可能会有所不同。
我试过了
Console.WriteLine(Regex.Replace("1235645847", ".{1,4}", "$&-").TrimEnd('-'));
但它不是动态的,它仅适用于第一个模式。
有可能实现这一目标吗?任何帮助表示赞赏。
解决方案
如前所述,这个问题与正则表达式没有任何共同之处。好吧,除了模式,但你在不同的上下文中使用它。你只需要格式化一些字符串,使用一些模式。
例如,您可以使用此功能:
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, '=');
推荐阅读
- javascript - 如何在从firebase检索的字符串中设置单词的样式?
- .net - 错误 NETSDK1085:“NoBuild”属性设置为 true,但调用了“Build”目标
- html - 具有变化的 img 的固定大小容器的奇怪滚动行为
- arrays - 使用 Bash 在数组中查找多个重复项及其索引?
- flutter - 如何为容器添加背景颜色,包括 Flutter 中的 Expanded
- javascript - 使用源映射时,Firefox 开发人员调试变量标记为未定义
- .net - 尝试通过 xlink:href 属性查找元素时出现 InvalidSelectorException
- ms-access - 是否有 VBA 代码(用于 Access 2016)来创建空白/任何 PNG 文件
- laravel - Laravel Eloquent - 如何获得嵌套关系
- python - 在 Python/IronPython 中包含现有代码片段