Добавьте константы в начало и конец «файла» после нескольких замен - PullRequest
2 голосов
/ 21 апреля 2020

Я уже нашел, как сделать несколько замен, но заменить

(from1)|(from2).....

на

(?1to1)(?2to2)

Например, если У меня есть:

hello all! I think saying hello to all is a nice way to introduce oneself.

, и я заменяю

(hello)|(all)

на

(?1greetings)(?2everyone)

Я получаю

greetings everyone! I think saying greetings to everyone is a nice way to introduce oneself.

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

StartOfAllgreetings everyone! I think saying greetings to everyone is a nice way to introduce oneself.EndOfAll

Можете ли вы помочь мне с этим? Вещи, которые я безуспешно пытался включить, включают использование $, \ z, \ Z для определения конца строки и использование таких групп сброса ответвлений (? | (Привет) | (все)) *

1 Ответ

1 голос
/ 21 апреля 2020

Использование

Найти что: (^)(?<!(?s:.))|(hello)|(all)|($)(?!(?s:.)) Или с . соответствует переводу новой строки ON : (^)(?<!.)|(hello)|(all)|($)(?!.) Заменить на: (?1StartOfAll)(?2greetings)(?3everyone)(?4EndOfAll)

ПРИМЕЧАНИЕ : чтобы также обрабатывать совпадение конца файла, когда другая альтернатива также совпадает в конце файла, необходимо добавить дополнительные группы и обработчик их в шаблоне замены тоже:

Найти что : (?s)(^)(?<!.)|(hello)(?:($)(?!.))?|(all)(?:($)(?!.))?|($)(?!.) Заменить на : (?1StartOfAll)(?2greetings)(?3EndOfAll)(?4everyone)(?5EndOfAll)(?6EndOfAll)

Теперь необязательные группы без захвата (?:($)(?!.))? обеспечивают дополнительный захват для конечных позиций файла, и поэтому есть дополнительные (?nEndOfAll) в шаблон замены.

Подробности

У (^)(?<!(?s:.))|(hello)|(all)|($)(?!(?s:.)) есть четыре альтернативы, те, которые вас интересуют:

  • (^)(?<!(?s:.)) - Первая альтернатива и начало файла совпадают (и заносятся в группу 1) с ^, которому не предшествует какой-либо символ (обеспечивается отрицательным lookbehind (?<!.)) - добавлена ​​встроенная группа модификаторов, чтобы убедиться, что регулярное выражение работает независимо от дополнительных настроек регулярного выражения в Notepad ++)
  • ($)(?!(?s:.)) - соответствует (и захватывает в группу 4) конец строки, за которым не следует ни один символ (см. (?!(?s:.)) отрицательный прогноз).

Настройки и демо :

enter image description here

...