我想在我的字符串中用零填充每个数字(它必须是8位数)。
e.g。
asd 123 rete > asd 00000123 rete
4444 my text > 00004444 my text
是否可以使用正则表达式执行此操作?特别是Regex.Replace()
?
请注意,对于不同的数字,零的数量是不同的。我的意思是填充号码必须是8位数。
答案 0 :(得分:62)
Microsoft内置了以下功能:
someString = someString.PadLeft(8, '0');
这是关于MSDN
的文章要使用正则表达式,请执行以下操作:
string someText = "asd 123 rete";
someText = Regex.Replace(someText, @"\d+", n => n.Value.PadLeft(8, '0'));
答案 1 :(得分:5)
线程已经老了,但也许有人需要这个。
尼克表示他想使用正则表达式。为什么?没关系,也许它的乐趣。我不得不在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.
答案 2 :(得分:3)
如果您没有任何Regex附件,请使用格式字符串:
答案 3 :(得分:0)
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, '#');
}
只需将'#'替换为0或'0'。 希望能有所帮助:)