Заменить все вхождения символа между двумя строками - PullRequest
2 голосов
/ 17 июня 2020

Я хочу заменить все пробелы между string1 и string2 символом _ во всех строках текстового документа с помощью Notepad ++.

Примеры:

string1 this is a first example string2
string1 this is a second example string2

Ожидаемый результат:

string1_this_is_a_first_example_string2
string1_this_is_a_second_example_string2

Я пробовал это выражение (?<=string1)(\s*)(?=string2), но оно не сработало.

1 Ответ

2 голосов
/ 17 июня 2020

Вы можете использовать

Find What : (?:\G(?!^)|string1)(?:(?!string1|string2).)*?\K\h(?=.*string2) Заменить на : _

См. Демонстрацию регулярного выражения .

ПРИМЕЧАНИЕ :

  • Если вам нужно сопоставить только обычные пробелы, замените \h обычным пробелом
  • Более подходящей проверкой конца предыдущего успешного совпадения является \G(?!^(?<![\s\S])), но если ваши ожидаемые совпадения находятся на одна строка, вы можете go при использовании \G(?!^).

Подробности

  • (?:\G(?!^)|string1) - либо конец предыдущего совпадения (но не начало строки) или string1
  • (?:(?!string1|string2).)*? - любой символ, 0 или более раз, но как можно меньше, что не начинается string1 или string2 последовательность символов
  • \K - отбросить уже совпавший текст
  • \h - любые горизонтальные пробелы
  • (?=.*string2) - после любого 0 или более должно быть string2 символов, кроме символов разрыва строки, как можно больше символов сразу справа от текущего местоположения.

enter image description here

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...