用零填充左边的垫

我想在我的字符串中用零填充每个数字(它必须是8位数)。

例如

asd 123 rete > asd 00000123 rete 4444 my text > 00004444 my text 

是否可以使用正则表达式执行此操作? 特别是Regex.Replace()

请注意,对于不同的数字,零的数量是不同的。 我的意思是填充号码必须是8位数。

Microsoft已为此构建了以下function:

 someString = someString.PadLeft(8, '0'); 

这是一篇关于MSDN的文章

要使用正则表达式,请执行以下操作:

 string someText = "asd 123 rete"; someText = Regex.Replace(someText, @"\d+", n => n.Value.PadLeft(8, '0')); 

线程很老但也许有人需要这个。

尼克表示他想使用正则表达式。 为什么? 没关系,也许是它的乐趣。 我不得不在SQL中进行内联替换,因此一些调用C#正则表达式的自制SQL函数很有帮助。

我需要填充的内容看起来像这样:

 abc 1.1.1 abc 1.2.1 abc 1.10.1 

我想要:

 abc 001.001.001 abc 001.002.001 abc 001.010.001 

所以我可以按字母顺序排序。

到目前为止(我发现)唯一的解决方案是在两个步骤中进行填充和截断到正确的长度。 我不能使用Lambda,因为这是在SQL中,我没有为此准备我的函数。

 //This pads any numbers and truncates it to a length of 8 var unpaddedData = "..."; var paddedData = Regex.Replace(unpaddedData , "(?<=[^\d])(?\d+)", "0000000${digits}"); var zeroPaddedDataOfRightLength = Regex.Replace(paddedData ,"\d+(?=\d{8})",""); 

说明:

 (?<=[^\d])(?\d+) (?<=[^\d]) Look behind for any non digit, this is needed if there are more groups of numbers that needs to be padded (?\d+) Find the numbers and put them in a group named digits to be used in the replacement pattern 0000000${digits} Pads all the digits matches with 7 zeros \d+(?=\d{8}) Finds all digits that are followed by at exactly 8 digits. ?= Doesn't capture the 8 digits. Regex.Replace(...,"\d+(?=\d{8})","") Replaces the leading digits with nothing leaving the last 8. 

如果您没有任何附加到Regex的附件,请使用格式字符串:

C#将int转换为带填充零的字符串?

http://www.xtremedotnettalk.com/showthread.php?t=101461