Панель слева с нулями

Я хочу, чтобы каждое поле оставалось нулевым (оно должно быть 8 цифр) в моей строке.

например.

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

Можно ли это сделать с помощью регулярных выражений? Особенно Regex.Replace()?

Обратите внимание, что количество нулей различно для разных чисел. Я имею в виду, что заполненное число должно быть 8 цифр.

Ответ 1

У Microsoft есть встроенные функции для этого:

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

И вот статья о MSDN

Чтобы использовать регулярное выражение, сделайте следующее:

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

Ответ 2

Тема старая, но, возможно, кому-то это нужно.

Никсон утверждает, что хочет использовать регулярное выражение. Зачем? Не важно, может быть, это весело. Мне пришлось сделать встроенную замену в SQL, поэтому некоторые домашние функции 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.