Замена текстовых элементов HTML переменной приращения - PullRequest
0 голосов
/ 26 января 2019

В приведенной ниже части HTML я хочу заменить всякий раз, когда текст найден, инкрементной переменной:

<li class="cat-item">
<a href="#" >Beautiful Reclessness</a>
</li>
<li class="cat-item">
<a href="#" >Comfort vs. Appearance</a>
</li>
<li class="cat-item">
<a href="#" >Highlights of the Runway</a>
<ul class='children'>
<li class="cat-item">
<a href="#" >Christian Louboutin Show</a>
</li>
<li class="cat-item">
<a href="#" >Givenchy F/W 2016</a>
</li>
<li class="cat-item">
<a href="#" >Spring by Gaultier</a>

Для этого используется приращение x++:

<li class="cat-item">
<a href="#" >x1</a>
</li>
<li class="cat-item">
<a href="#" >x2</a>
</li>
<li class="cat-item">
<a href="#" >x3</a>
<ul class='children'>
<li class="cat-item">
<a href="#" >x4</a>
</li>
<li class="cat-item">
<a href="#" >x5</a>
</li>
<li class="cat-item">
<a href="#" >x6</a>

Есть ли способ в Notepad ++ или Vim (поиск между > <) найти текстовое содержимое с помощью REGEX и заменить его счетчиком x?

Ответы [ 2 ]

0 голосов
/ 27 января 2019

Простой vim-ответ:

  1. Открыть файл - vim filename
  2. Установить вспомогательную переменную - :let num=1
  3. Выполнить замену - :g/href/execute printf("normal! citx%d", num) | let num=num+1

Команда :global позволяет выполнить операцию со всеми строками, соответствующими шаблону (в данном случае href).Операция, которую мы хотим сделать, - это изменить текст внутри тега <a> на x, за которым следует содержимое num, и увеличить num.

execute позволяет нам построить командную строкуиз струн;Я часто комбинирую с printf(), потому что мне легче читать.normal! - это Ex-команда, которая позволяет нам выполнять команды в нормальном режиме.cit - это vim'ism для «изменения внутри тега» из обычного режима.Затем мы просто подаем ему соответствующий текст замены (x%d) и увеличиваем счетчик.


Если вам интересно, как я это придумал, это довольно устоявшийся шаблон среди виммеров.На практике мне потребовалось около минуты, чтобы выполнить всю последовательность (быстрее, если бы я использовал ее чаще), так что это не один из тех ответов «потратьте 30 минут, пытаясь написать хорошее регулярное выражение» - это может бытьсделано в сеансе редактирования в реальном времени без особых размышлений, если человек, занимающийся редактированием, хорошо разбирается в основах vim.

0 голосов
/ 26 января 2019

Надеюсь, это поможет.

  1. Скачать плагин скрипта Python
  2. плагины> скрипт Python> новый скрипт> сохранить как «increment.py»

Разработайте свое регулярное выражение в regex101 или где-то еще и напишите сценарий

i=0

def increment(match):
  global i
  i=i+1
  return "x"+str(i)

editor.rereplace('(?<=>)\\b[^><]+', increment)

Сохраните и запустите ваш скрипт: плагины> скрипт Python> скрипты> приращение

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...