Как заменить только кавычки внутри определенного тега - PullRequest
0 голосов
/ 01 июня 2018

Как заменить только некоторые кавычки и сохранить весь контент, см. Пример ниже

<type>"sample"<type> 
<content>R.A.H.M.A.N. sample text."</content>

на

<type>"sample"<type>
<content>R.A.H.M.A.N. sample text.</content>

Заменить кавычку только внутри тега content, этоэто возможно?

Ответы [ 2 ]

0 голосов
/ 01 июня 2018
:%s!<content>\zs\_.\{-}\ze</content>!\=substitute(submatch(0), '"', '', 'g')!g

Идея такова:

  • Запустить команду подстановки для всех строк и для всех попаданий в одной строке: :%s!...!...!g
  • Поиск <content>,затем 0 или более символов (как можно меньше), затем </content>: `_. {-}
  • ... но установите начало матча сразу после <content> и конецсовпадение непосредственно перед </content>, соответственно: <content>\zs...\ze</content>
  • Это означает, что мы не подставляем сами части <content> и </content>, а только содержимое.
  • Замените его наРезультат выполнения выражения: \=
  • Выражение: substitute(submatch(0), '"', '', 'g'):
    • Взять соответствующий текст: submatch(0)
    • Поиск всех " и заменить их ничем: substitute(..., '"', '', 'g')
0 голосов
/ 01 июня 2018

Если все теги <content> находятся на одной строке, вы можете использовать команду :g:

:g=<content>.*</content>=s="==g

Это заменит все кавычки во всех строках, которые содержат открывание и закрытие <content> тег.(Это не обязательно означает, что эти кавычки находятся внутри тега <content>.)

См. : help global .

...