2014-09-02 3 views
1

Мне нужно заменить список, как это:Notepad ++ RegEx заменить ZEROFILL

105164 25 
105164 26 
105164 29 
105496 1 
105496 2 

Для

105164_0025 
105164_0026 
105164_0029 
105496_0001 
105496_0002 

Что-то вроде (\w)([0-9]+) к _$1, но как сделать левый нулевой отступ?

+0

Одно регулярное выражение не может этого сделать. Возможно, у Notepad ++ есть возможность выравнивать поправочные столбцы? Затем вы можете использовать регулярное выражение для заполнения чисел нулями вместо пробелов. –

+0

Вы говорите о нерегулярном языке, который не может быть выражен регулярным выражением. – HuStmpHrrr

ответ

5
[ ]([0-9]+) to _$1 --do your first replace 
_([0-9])$ to _000$1 
_([0-9][0-9])$ to _00$1 
_([0-9][0-9][0-9])$ to _0$1 

Тип чит-метода, но это единственный способ, о котором я могу думать.

+0

Хорошее редактирование. Я бы использовал «" без квадратных скобок, но это делает его более читаемым здесь при переполнении стека. – beiller

+0

_ ([0-9]) $ to '_000 $ 1' (подчеркивание) – DanFromGermany

+0

Исправлено. Также вы можете сделать это всего за 3 замены, объединив их на самом деле. Также интересно, возможно ли его использование OR (|) – beiller

3

Вы можете сделать в два прохода:

первый проход:
Найти: (\d+)$
Заменить: _0000$1

второй проход:
Найти: _0*(\d{4})$
Заменить с: _$1

+0

Хорошая идея! Только пустое пространство все еще существует или должно быть одно в '[] (\ d +) $', и оно получилось усеченным: D –

+1

@ Jonny5: Пробел здесь, но не очень заметен перед '(\ d +)' – Toto

Смежные вопросы