Панель слева с нулями
Я хочу, чтобы каждое поле оставалось нулевым (оно должно быть 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.
Ответ 3
Если у вас нет вложения в Regex, просто используйте строки форматирования:
С# конвертировать int в строку с нулями заполнения?
http://www.xtremedotnettalk.com/showthread.php?t=101461