2017-01-23 2 views
1

Я использую notepad ++ и пытаюсь найти/заменить вхождения определенного слова в файле XML другим словом внутри определенного тега.Regex для извлечения подстроки из строки

Например: XML-файл содержит

<alerts> 
    <ccEmails>[email protected],[email protected]</ccEmails> 
    <toEmails>[email protected]</toEmails>    
</alerts> 

Мне нужно заменить пример с myexample настоящее время внутри <ccEmails> но не внутри <toEmails>

Я попытался ccEmails.*(example).*ccEmails в https://regex101.com/r/Q8UB6a/1, и возвращается только в последнем случае. Кроме того, я не могу заменить строку другим.

Когда я попробовал это в блокноте ++, я получаю все строки внутри <ccEmails>

enter image description here

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

ответ

1

Если вы планируете использовать Найти и заменить диалог, вам нужно использовать регулярное выражение \G на основе как

(?:<ccEmails>|\G(?!^))[^<]*?\K\bexample\b 

и заменить myexample. Обнаружил online regex demo.

Детали:

  • (?:<ccEmails>|\G(?!^)) - либо <ccEmails> или конец последнего успешного матча
  • [^<]*? - любые 0+ символьных кроме < как можно
  • \K - опустить текст, сопоставленный до сих пор - \bexample\b - целые слова example.

enter image description here

0

Замените (<ccEmails>[^<>][email protected])example\. на \1myexample. и замените все. Заменить все нужно будет делать два или более раз, поскольку каждый проход только изменяет один example в пределах обязательных строк.

Смежные вопросы