我想格式化一个看起来像这样的字符串
BPT4SH9R0XJ6
变成这样的东西
BPT4-SH9R-0XJ6
该字符串将始终是 12 个字母和数字的组合
任何建议将不胜感激,谢谢
尝试Regex.Replace(input, @"(\w{4})(\w{4})(\w{4})", @"$1-$2-$3");
正则表达式经常被嘲笑,但它是一种非常简洁的方式来做你需要的事情。可以扩展到使用字符串方法难以满足的更复杂的要求。
您可以"(.{4})(.{4})(.{4})"
用作您的表达方式和"$1-$2-$3"
替代品。然而,这对于 regexp 来说并不是一个很好的用途:你可以使用Substring
.
var res = s.Substring(0,4)+"-"+s.Substring(4,4)+"-"+s.Substring(8);
如果规则总是分成四个字符的三个块,则不需要 reg exp:
str.Substring(0,4) + "-" + str.Substring(4,4) + "-" + str.Substring(8,4)
看起来应该结合String.Concat
并string.Substring
处理您需要的一切。
var str = "BPT4SH9R0XJ6";
var newStr = str.Substring(0, 4) + "-" + str.Substring(4, 4) + "-" + str.Substring(8, 4);
你有什么理由想做一个正则表达式?你可以只插入连字符:
string s = "BPT4SH9R0XJ6";
for(int i = 4; i < s.length; i = i+5)
s = s.Insert(i, "-");
这将继续每 4 个字符添加连字符,如果字符串太短/太长/等,也不会出错。
return original_string.SubString(0,4)+"-"+original_string.SubString(4,4)+"-"+original_string.SubString(8,4);
string str = @"BPT4SH9R0XJ6";
string formattedString = string.Format("{0}-{1}-{2}", str.Substring(0, 4), str.Substring(4,4), str.Substring(8,4));
这适用于任何长度的字符串:
for (int i = 0; i < (int)Math.Floor((myString.Length - 1) / 4d); i++)
{
myString = myString.Insert((i + 1) * 4 + i, "-");
}
结束了使用这个
var original = "BPT4SH9R0XJ6".ToCharArray();
var first = new string(original, 0, 4);
var second = new string(original, 4, 4);
var third = new string(original, 8, 4);
var mystring = string.Concat(first, "-", second, "-", third);
谢谢
如果您保证您正在操作的文本是 12 个字符的代码,那么您为什么不直接使用子字符串呢?为什么需要正则表达式?
String theString = "AB12CD34EF56";
String theNewString = theString.Substring(0, 4) + "-" + theString.Substring(4, 4) + "-" + theString.Substring(8, 4);'