Форматирование строк RegEx в Notepad++

Форматирование строк RegEx в Notepad++

Я неплохо разбираюсь в RegEx, но не могу понять, как они работают.

Как выполнить поиск/замену в NotePad++ и убедиться, что выходные данные имеют фиксированную длину, а входные данные могут быть гибкими?

Например, если применить регулярное выражение к этому: 23-6-2016чтобы получить: 23-06-2016(дополнительный 0 для 06, но не для 12, например)

Другой вариант — создать это:

TestStringи Testстанет
TestString______________________(дополнительными пробелами.)
Test____________________________(дополнительными пробелами.)

Конечно, идея здесь заключается в выполнении массового поиска/замены, при котором все выходные данные будут иметь одинаковую длину.

Пожалуйста, объясните, в чем заключается эта мысль.

EDIT: чтобы дать представление о данных, с которыми я работаю, вот пример строки, которую мне нужно обработать:

12345678    TXT 19700101    0   100 20160624    100 Comment text
12345678    TXT 19700101    100 100,25  20160624    0,25    Comment text
12345678    TXT 19700101    100,25  100,5   20160624    0,25    Comment text

Обратите внимание, что они разделены табуляцией. Первый 0 в первой строке должен быть отформатирован как 0,00, 100 как 100,00, но 12345678 и даты не должны быть отформатированы как ,00. Последние 100,5 должны быть отформатированы как 100,50.

Я обошел стороной тему с датами, так что сейчас это не так важно.

решение1

В ответ на:

12345678 TXT 19700101 0 100 20160624 100 Текст комментария
12345678 TXT 19700101 100 100,25 20160624 0,25 Текст комментария
12345678 TXT 19700101 100,25 100,5 20160624 0,25 Текст комментария

Для 4-го столбца:
^((?:\S+\s+){3}\d+)(\s)до \1,0\2
^((?:\S+\s+){3}\d+,\d)(\s)до\10\2

Для 5-го/7-го столбца:
аналогично предыдущему, просто замените {3}на {4}/ {6}в правиле соответственно

Объяснение
1-е правило

The1-е правилодобавляется ,0к числам без ,. Теперь все числа должны иметь ,\d.

2-е правило

The2-е правилодобавляет a 0к тем, у которых после запятой стоит одна цифра.

Что касается(?:):группа без захвата, предыдущие столбцы уже захвачены, \1поэтому дополнительный захват не нужен.

Это только дополняет число до 2 знаков после запятой. Чтобы дополнить произвольное число, используйте подход pad excessively, then trim.

Последнее слово?
По моему мнению, простое регулярное выражение, как в notepad++, не подходит для этой задачи. Некоторые базовые скрипты, такие как bash или perl, справились бы с этим с гораздо большей читабельностью.

решение2

Раздел A: Подкладка до определенной длины

Чтобы дополнить строки справа на N символов с помощью регулярных выражений, добавьте N пробелов в конец строки, затем сгруппируйте первые N символов, заменив остальные.

Проход 1: Добавление символов заполнения

Найти: $Заменить:______________________________

В конце строки добавьте 30 пробелов. (Я использовал подчеркивания, так как пробелы не форматируются в сообщении).

Проход 2: Обрезка слева на 30 символов

Чтобы добавить дату, разделенную дефисом, в начале строки, соответствующим образом сопоставьте каждый раздел.

Найти: ^([[:print:]]{0,30}).*$ Заменить на\1

В начале строки замените группу длиной до тридцати печатных символов, а затем все оставшиеся символы этой группой.

Чтобы выбрать другую длину строки, используйте n-пробелов в проходе 1, а затем замените 30 на длину в проходе 2.

Раздел B: Строка, начинающаяся с даты

Пропуск 1 (день месяца):

Найти что: ^([0-9])- Заменить на:0\1-

Замените шаблон (строку, начинающуюся с одной цифры, за которой следует тире) на дополненный ноль, цифру и тире.

Пропуск 2 (месяц):

Найти что: -([0-9])- Заменить на:-0\1-

Замените шаблон (одну цифру между двумя тире) на тире, дополненный ноль, цифру и тире.

Связанный контент