Как заменить "string1" на "string2", если строка содержит "string3" в Notepad++?

У меня есть следующее содержимое в файле:

This is line one
This is line two with string1 and string3
This is line three with string3

Мне нужно заменить 'string1' на 'string2', если строка содержит 'string3', так что результатом будет:

This is line one
This is line two with string2 and string3
This is line three with string3
0
источник поделиться
2 ответа

Чтобы заменить все вхождения string1 в любой строке, которая содержит string3 где - нибудь на этой линии, вы должны использовать \G регулярное выражение на основе:

(?:\G(?!^)|^(?=.*string3)).*?\Kstring1

Замените string2. См. Демо-версию regex онлайн.

Детали:

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

Следующий текст

This is line string1
This is line two with string1 and string3 string1
This is line two with string1 string1 and string3 
This is line three with string3
This is line string3 with string1 and string1

превращается в

enter image description here

+1
источник

От имени @Gawil

На Notepad++ Перейдите к Search-> Замените

В разделе "Найти что": ^(?=.*?string3)(.*?)string1(.*?)$

В разделе "Заменить с помощью": \1string2\2

При необходимости выполните "Заменить" или "Заменить все". enter image description here

0
источник

Посмотрите другие вопросы по меткам или Задайте вопрос