Добавьте постоянную величину к числовому атрибуту XML

Фон

Добавьте постоянную величину к числам, соответствовавшим регулярному выражению, с помощью энергии (gvim).

Проблема

Следующее регулярное выражение будет соответствовать width="32":

/width="\([0-9]\{2\}\)"

Вопрос

Как Вы заменяете числовое значение width атрибут с результатами математического выражения, которое использует значение атрибута? Например, я хотел бы выполнить следующую глобальную замену:

:%s/width="\([0-9]\{2\}\)"/width="\1+10"/g

Это произвело бы width="42" для width="32" и width="105" для width="95".

Спасибо!

2
задан 14.01.2011, 21:57

1 ответ

Чтобы сделать вычисление выражения в замене, см.:

:help :s\=
:help submatch()

Например:

:%s/width="\([0-9]\{2\}\)"/\='width="'.(submatch(1)+10).'"'/g

Когда Вы делаете замену выражения, вся замена должна быть выражением, таким образом, необходимо конкатенировать (см. :help expr-.) три элемента выражения. Сломанный:

  • \=

Укажите, что заменяющий шаблон является выражением.

  • 'width="'

Первая строка.

  • (submatch(1) + 10)

Добавьте десять к первому sub-pattern-match — включенный в круглую скобку, таким образом, Vim не пытается включать предыдущую строку в операцию сложения.

  • '"'

Заключительная кавычка как строка.

(Обратите внимание, что я не включал операторы конкатенации в разбивку.)

4
ответ дан 08.12.2019, 06:30

Теги

Похожие вопросы