我不太擅长使用正则表达式,我正在尝试使用它们来格式化数字。
原始数字类似于 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 的长度为六。
非常感谢任何帮助,谢谢!
请您参考如下方法:
试试这个(除非你需要正则表达式来做其他事情):
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'));
