Итерировать с регулярным выражением в Notepad++?

У меня есть такой текстовый файл:

(A) foo
(B) bar
(B) eggs
x spam

(A), (B) и т. д. являются тегами приоритета. Они изменяются, после чего файл сортируется так, чтобы строки с приоритетом (А) были сверху. Мне интересно, есть ли однострочный поиск и замена регулярных выражений, который заменит ТОЛЬКО ПЕРВЫЙ тег (A), первый (B) и т. д., с CR/LF [тег], чтобы файл выглядел так :

(A) foo

(B) bar
(B) eggs

x spam

Легко сделать скрипт, который делает это. Но регулярное выражение, вызываемое как макрос в Notepad++, было бы просто идеальным. Какие-нибудь мысли?


person RolfBly    schedule 15.03.2013    source источник


Ответы (1)


Что-то вроде этого должно сделать это:

Заменять

(\([^)]*\))(.*\r\n)(?!\1)

с

\1\2\r\n

Пояснение:

[^)]* означает ноль или более символов, которые не являются ).
\([^)]*\) — просто получает что-то в квадратных скобках (вам нужно экранировать ( и ) с помощью \).
Окруженный (), чтобы сохранить его в первой группе (используйте \1 чтобы получить его).
.*\r\n – все, за чем следует новая строка.
Окружено (), чтобы сохранить его во второй группе (используйте \2, чтобы получить его).
(?!\1) – отрицательный просмотр вперед, то же самое. тег не должен быть на следующей строке.

person Bernhard Barker    schedule 15.03.2013
comment
Блестяще, спасибо! Буду искать дополнительную документацию по (негативному) упреждению. Очень полезно, еще раз спасибо. - person RolfBly; 16.03.2013
comment
@RolfBly Не забудьте проголосовать и/или принять этот ответ, если он показался вам полезным. - person Bernhard Barker; 16.03.2013