Powershell: как заменить по regexp в найденном по regexp?

Есть XML-файл с примерной структурой
<product> ...
   <name> ....
      <desc> HTML-код </desc>


Вхождений тега desc около 1000.
Задача - убрать HTML-теги внутри каждого тега desc , и сохранить остальной контент файла.
<product> ...
   <name> ....
      <desc> только текст без тегов  </desc>


Получается только сохранить файл с содержимым всех тегов desc без HTML:

[regex]::matches((Get-Content D:\test2.xml),"(?<=(<desc>)).*?(?=(</desc>))").value -replace '<[^>]*>', '' | sc d:\3.xml'


А как сохранить исходный файл, почищенный от HTML внутри каждого тега desc ?
  • Вопрос задан
  • 75 просмотров
Решения вопроса 1
@dodo512
[regex]::replace(
    (Get-Content D:\test2.xml),
    '(?<=<desc>).*?(?=</desc>)', 
    { $args[0].Value -replace '<[^>]*>', '' }
)
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
@MaxKozlov
Алексей, общая формулировка - это какакая-нибудь статья по регекспам, к powershell это отношения не имеет. Они сейчас почти все олинаковые.

Но даже в общем случае если вы перебираете только найденное, неудивительно что в выводе только найденное.

надо отойти тогда от онлайнера в одну строку и сделать полноценный цикл с использованием позиции найденного, чтобы записывать и промежутки тоже.
Или, (powershell only), например, использовать -split '(<desc>.*?</desc>)' и потом в цикле чистить.
Но преобразовывать в [xml], мне кажется, проще
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы