15

我想格式化一个看起来像这样的字符串

BPT4SH9R0XJ6

变成这样的东西

BPT4-SH9R-0XJ6

该字符串将始终是 12 个字母和数字的组合

任何建议将不胜感激,谢谢

4

11 回答 11

31

尝试Regex.Replace(input, @"(\w{4})(\w{4})(\w{4})", @"$1-$2-$3");

正则表达式经常被嘲笑,但它是一种非常简洁的方式来做你需要的事情。可以扩展到使用字符串方法难以满足的更复杂的要求。

于 2012-04-23T18:41:09.760 回答
6

您可以"(.{4})(.{4})(.{4})"用作您的表达方式和"$1-$2-$3"替代品。然而,这对于 regexp 来说并不是一个很好的用途:你可以使用Substring.

var res = s.Substring(0,4)+"-"+s.Substring(4,4)+"-"+s.Substring(8);
于 2012-04-23T18:38:56.520 回答
4

如果规则总是分成四个字符的三个块,则不需要 reg exp:

str.Substring(0,4) + "-" + str.Substring(4,4) + "-" + str.Substring(8,4)
于 2012-04-23T18:40:50.270 回答
3

看起来应该结合String.Concatstring.Substring处理您需要的一切。

于 2012-04-23T18:39:12.523 回答
2
  var str = "BPT4SH9R0XJ6";
  var newStr = str.Substring(0, 4) + "-" + str.Substring(4, 4) + "-" + str.Substring(8, 4);
于 2012-04-23T18:42:01.610 回答
1

你有什么理由想做一个正则表达式?你可以只插入连字符:

string s = "BPT4SH9R0XJ6";
for(int i = 4; i < s.length; i = i+5)
    s = s.Insert(i, "-");

这将继续每 4 个字符添加连字符,如果字符串太短/太长/等,也不会出错。

于 2012-04-23T18:42:46.410 回答
1
return original_string.SubString(0,4)+"-"+original_string.SubString(4,4)+"-"+original_string.SubString(8,4);
于 2012-04-23T18:42:59.840 回答
1
string str = @"BPT4SH9R0XJ6";
string formattedString = string.Format("{0}-{1}-{2}", str.Substring(0, 4), str.Substring(4,4), str.Substring(8,4));
于 2012-04-23T18:45:05.340 回答
1

这适用于任何长度的字符串:

            for (int i = 0; i < (int)Math.Floor((myString.Length - 1) / 4d); i++)
            {
                myString = myString.Insert((i + 1) * 4 + i, "-");
            }
于 2013-02-28T12:49:11.803 回答
0

结束了使用这个

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);

谢谢

于 2012-04-23T18:44:27.597 回答
0

如果您保证您正在操作的文本是 12 个字符的代码,那么您为什么不直接使用子字符串呢?为什么需要正则表达式?

String theString = "AB12CD34EF56";
String theNewString = theString.Substring(0, 4) + "-" + theString.Substring(4, 4) + "-" + theString.Substring(8, 4);'
于 2012-04-23T18:58:05.213 回答