用零填充左边

  • 本文关键字:左边 填充 c# regex
  • 更新时间 :
  • 英文 :


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

例如

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

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

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

Microsoft为此内置了函数:

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

这是一篇关于MSDN的文章

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

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

很旧,但也许有人需要这个。

Nickon 表示他想使用正则表达式。为什么?没关系,也许很有趣。我不得不在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])(?<digits>d+)",
                                                     "0000000${digits}");
var zeroPaddedDataOfRightLength = Regex.Replace(paddedData ,"d+(?=d{8})","");

解释:

(?<=[^d])(?<digits>d+)
(?<=[^d])       Look behind for any non digit, this is needed if there are 
                 more groups of numbers that needs to be padded
(?<digits>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.

如果您没有任何正则表达式的附件,只需使用格式字符串:

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

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

static void Main(string[] args)
    {
       string myCC = "4556364607935616";
       string myMasked = Maskify(myCC);
       Console.WriteLine(myMasked);
    }        
public static string Maskify(string cc)
    {
       int len = cc.Length;
       if (len <= 4)
          return cc;
       return cc.Substring(len - 4).PadLeft(len, '#');
    }

输出:

######5616

只需将"#"替换为 0 或"0"。希望对:)有所帮助

最新更新