Как переместить определенный текст строки, переменную позицию, в определенный столбец - PullRequest
0 голосов
/ 05 февраля 2019

У меня есть текстовый файл с сотнями строк, в который я хочу переместить определенный конечный фрагмент каждой строки (переменная длина начала, все после «AS») в определенную позицию столбца.

Этозадача, которую мне нужно делать регулярно.Я делаю это конкретное форматирование сейчас в Notepad ++ с действиями find-n-replace, но последние шаги - утомительные ручные строки табуляции.

Необработанный шаблон похож на это (это после некоторых первоначальных манипуляций с форматированием через find-n-заменить действия):

red.id AS red_identifierred.c AS red_colormbr.red_mbr AS red_memberstat.red_stat AS red_status

Я хочу, чтобы форматирование было таким, чтобы все части "AS ..." начинались со столбца x:

red.id AS red_identifierred.c AS red_colormbr.red_mbr AS red_memberstat.red_stat AS red_status

Любая помощь будет очень признательна!Может ли это быть обработано в Notepadd ++?Python (только язык, который я знаю) сценарий рекомендуется?

Ответы [ 2 ]

0 голосов
/ 06 февраля 2019

Вы можете сделать это в 2 шага:

  1. Изменить ширину вкладки для определенной ширины, здесь я использую 25 enter image description here
    • Ctrl + H
    • Найти что: \h+(?=AS\b)
    • Заменить на: \t
    • check Обтекание
    • check Регулярное выражение
    • Заменить все

Объяснение:

\h+         # 1 or more horizontal spaces
(?=         # start lookahead, zro-length assertion to make sure we have after:
  AS        # literally AS
  \b        # word boundary to make sure we don't match AS... (i.e. Asterisk)
)           # end lookahead

Результат для данного примера:

red.id                   AS red_identifier
red.c                    AS red_color
mbr.red_mbr              AS red_member
stat.red_stat            AS red_status 

Результат:

enter image description here

0 голосов
/ 06 февраля 2019

Вы можете сделать это с помощью 4 отдельных операций поиска / замены на основе регулярных выражений:
Замена зависит от количества начальных пробелов, необходимых для достижения желаемого выравнивания column x.

Регулярного выражения к совпадению:

enter image description here

После замены:

enter image description here

Таким образом, regex и заменитьдля каждой группы будет:

Найти что: (?:(AS red_[i].+)) // захватывает AS red_identifier текст
Заменить на: (7 начальных пробелов) $ 1 // $ 1 заменяется захваченным текстом

Найти что: (?:(AS red_[c].+)) // захватывает AS red_color текст
Заменить на: (8 начальных пробелов) $ 1

Найти что: (?:(AS red_[m].+)) // захватить AS red_member текст
Заменить на: (2 начальных пробела) $ 1

Эти 3 замены будут выровнены по AS в последней строке с AS red_status.Конечно, вы можете настроить интервал, но регулярное выражение для последней строки в вашем примере будет выглядеть следующим образом:

Найдите что: (?:(AS red_[s].+)) // захватывает AS red_status текст
Замените на: (n ведущийпробелы) $ 1 // n здесь будет любое количество пробелов, которое вам может понадобиться.

Если вы добавите интервал к 4-й строке, тогда используемое количество интервалов необходимо будет добавить к первым 3сохраняйте желаемое выравнивание column x.

Например, если вы хотите 4 дополнительных пробела перед AS в последней строке, то:

  • для соответствия 1-й линии потребуется 11 ведущихпробелы до $ 1
  • для совпадения 2-й строки потребуется 12 пробелов перед $ 1
  • для совпадения 3-й строки потребуется 6 пробелов до $ 1

... додержите column x выровненным к AS.

...