Используя регулярное выражение Notepad ++, сопоставьте все пробелы между определенными символами - PullRequest
1 голос
/ 21 сентября 2019

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

Так вот пример некоторых строк кода:

label:          bcf INTCON,2                ; comment comment and more comment.
                btfss PORTA,2

Ближайший Iпришел (?<=^).+(?=;).Это не только соответствует ВСЕМ между началом строки и точкой с запятой, но также включает все точки с запятой, кроме самой последней точки с запятой.Представьте себе строки кода с комментариями, которые были закомментированы.Также не учитывается строка без комментариев.

Как мне это сделать?

Ответы [ 3 ]

0 голосов
/ 21 сентября 2019

Если вы хотите изменить пробел между bcf и INTCON, 2 на 2 вкладки, вы можете сопоставить 2 «слова» и убедиться, что они не начинаются с ;

^(?:\S+:)?\h+(?!;)\S+\K\h+(?=[^\s;])
  • ^ Начало строки
  • (?:\S+:)? При желании сопоставить 1+ непробельные символы и :
  • \h+(?!;) Сопоставить 1+ горизонтальные пробельные символы, а затем подтвердить, что являетсясправа не является ;
  • \S+\K Совпадение 1+ непробельных символов, забудьте, что совпало
  • \h+ Совпадение 1+ горизонтальных пробельных символов (этот матч будет заменен)
  • (?=[^\s;]) Утверждение о том, что справа не символ пробела или ;

В качестве замены используйте 2 вкладки \t\t

Regex demo

Edit

Если вы хотите найти первый пробел между непробельными символами, вы можете использовать

^.*?\S\K (?=\S)
0 голосов
/ 21 сентября 2019
  • Ctrl + H
  • Найти что: ^(\w+:)\h+|^\h+
  • Заменить на: (?1$1\t:\t\t)
  • check Обтекание
  • check Регулярное выражение
  • Заменить все

Объяснение:

^           # beginning of line
  (\w+:)    # group 1, 1 or more word characters followed by colon
  \h+       # 1 or more horizontal spaces
 |          # OR
^           # beginning of line
  \h+       # 1 or more horizontal spaces

Замена:

(?1         # if group 1 exists, then
  $1\t      #  content of group 1 and a tab
 :          # else
  \t\t      #  2 tabs
)           # end conditional replace

Снимок экрана:

enter image description here

0 голосов
/ 21 сентября 2019

Может быть,

^([^:\r\n]+:)\s*([^\r\n]+?)(?:$|\s{2,})(;.*)?$

и замена,

$1      $2      $3

может быть в порядке для начала.

Демонстрация


Если вы хотите упростить / изменить / изучить выражение, это объяснено на верхней правой панели regex101.com .Если хотите, вы также можете посмотреть в эту ссылку , как она будет сопоставляться с некоторыми примерами ввода.


...