Skip to main content
 首页 » 编程设计

C# 正则表达式数字格式

2024年02月23日30lovecherry

我不太擅长使用正则表达式,我正在尝试使用它们来格式化数字。

原始数字类似于 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'));