C#正则表达式数字格式

时间:2011-04-28 03:24:20

标签: c# regex

我对正则表达式不是很好,我试图用它们来格式化数字。

原始数字将类似于05XX-123,并且我想附加零以使其成为05XX-000123(连字符之后的数字应该预先加零,直到其长度为6)。如果我混合使用正则表达式和字符串操作,我可以使用以下解决方案实现此目的......

Regex regex = Regex(@"^([0-9]{2})([A-Za-z]{2})-([0-9]*)$");
Match match = regex.Match("05XX-123");
string result = match.Groups[1].Value + match.Groups[2].Value + "-" + match.Groups[3].Value.PadLeft(6, '0');

但是,我想避免使用第三行,因为我希望能够在运行时定义这些转换。

似乎有类似的东西应该是可能的,但我只是不太确定如何将零添加到第三组(字母后面的数字)。

Regex regex = Regex(@"^([0-9]{2})([A-Za-z]{2})-([0-9]*)$");
string result = regex.Replace("05XX-123", "$1$2-$3");

显然,上面的示例只返回与提供的值相同的值,但似乎我应该能够对$ 3组做一些事情,将前面的零加上$ 3的长度为6。

非常感谢任何帮助,谢谢!

1 个答案:

答案 0 :(得分:4)

试试这个(除非你需要正则表达式):

string[] parts = originalNumber.Split(new char[] {'-'});
string newNumber = parts[0] + "-" + parts[1].PadLeft(6, '0');

修改

另一种正则表达式替代方案:

Regex regEx = new Regex(@"^([0-9]{2}[A-Z]{2}\-)([0-9]*)$", RegexOptions.IgnoreCase);
string result = regEx.Replace("05XX-123",m => m.Groups[1].Value + m.Groups[2].Value.PadLeft(6, '0'));