我对正则表达式不是很好,我试图用它们来格式化数字。
原始数字将类似于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。
非常感谢任何帮助,谢谢!
答案 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'));