用破折号格式化字符串

Kev*_*vin 11 .net c# string.format

我有一个压缩的字符串值,我从导入文件中提取.我需要将其格式化为包裹编号,格式如下:##-##-##-###-###.因此,字符串"410151000640"应变为"41-01-51-000-640".我可以使用以下代码执行此操作:

String.Format("{0:##-##-##-###-###}", Convert.ToInt64("410151000640"));
Run Code Online (Sandbox Code Playgroud)

但是,字符串可能不是所有数字; 它可能有一两个字母,因此转换为int将失败.有没有办法在字符串上执行此操作,以便每个字符(无论是数字还是字母)都能正确地符合格式?

Yur*_*ich 27

Regex.Replace("410151000640", @"^(.{2})(.{2})(.{2})(.{3})(.{3})$", "$1-$2-$3-$4-$5");
Run Code Online (Sandbox Code Playgroud)

或稍短的版本

Regex.Replace("410151000640", @"^(..)(..)(..)(...)(...)$", "$1-$2-$3-$4-$5");
Run Code Online (Sandbox Code Playgroud)


Jam*_*iec 10

我会通过拥有自己的格式化方法来解决这个问题,只要您知道"地块编号"始终符合特定规则即可.

public static string FormatParcelNumber(string input)
{
  if(input.length != 12)
     throw new FormatException("Invalid parcel number. Must be 12 characters");

  return String.Format("{0}-{1}-{2}-{3}-{4}",
                input.Substring(0,2),
                input.Substring(2,2),
                input.Substring(4,2), 
                input.Substring(6,3), 
                input.Substring(9,3));
}
Run Code Online (Sandbox Code Playgroud)