Задать вопрос

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

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

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

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

Похожие вопросы
Wanted. Санкт-Петербург
До 450 000 ₽
Wanted. Санкт-Петербург
До 120 000 ₽
Wanted. Санкт-Петербург
До 100 000 ₽
03 янв. 2025, в 10:40
2000 руб./за проект
03 янв. 2025, в 10:37
500000 руб./за проект
03 янв. 2025, в 10:35
45000 руб./за проект