поиск и замена на регулярное выражение для увеличения числа в коде Visual Studio - PullRequest
1 голос
/ 15 октября 2019

Сейчас я работаю над большим svg-спрайтом. Разные изображения всегда на расстоянии 2000px.

То, что у меня есть:

<g transform="translate(0,0)">
<g transform="translate(0,2000)">
<g transform="translate(0,4000)">

После того, как регулярное выражение хочет этого, просто добавив 2000 ко второму числу:

<g transform="translate(0,2000)">
<g transform="translate(0,4000)">
<g transform="translate(0,6000)">

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

Я думал об использовании регулярных выражений и дажеобнаружил, что работает в строке поиска VS Code. Дело в том, что я никогда не работал с какими-либо регулярными выражениями, и я немного растерялся.

Может ли кто-нибудь дать мне решение и объяснение увеличения всех чисел выборки к 2000 году? Я надеюсь, что я понимаю это потом, так что я могу вникнуть в эту тему. Я также доволен только ссылками на учебники в целом или моим конкретным вариантом использования.

Большое спасибо:)

1 Ответ

1 голос
/ 15 октября 2019

В VSCode вы не можете заменить увеличенное значение внутри совпадения / захвата. Это можно сделать только внутри функции обратного вызова, переданной в качестве аргумента замены в функцию / метод замены регулярных выражений.

Вы можете использовать Notepad ++ для выполнения этих замен после установки плагина Python Script. Следуйте этим инструкциям , а затем используйте следующий код Python:

def increment_after_openparen(match):
    return "{0}{1}".format(match.group(1),str(int(match.group(2))+2000))

editor.rereplace(r'(transform="translate\(\d+,\s*)(\d+)', increment_after_openparen)

См. regex demo .

Примечание:

  • (transform="translate\(\d+,\s*)(\d+) сопоставляет и записывает в Группу 1 transform="translate( + 1 или более цифр, затем , и 0 или более пробелов (с (transform="translate\(\d+,\s*))), а затем фиксирует в Группе 2 любую одну или несколько цифр (с(\d+))
  • match.group(1) - это содержимое группы 1, match.group(2) - это содержание группы 2.

По сути, любая группа состоит из пары неэкранированных скобок исчетчик групп начинается с 1. Итак, если вы используете шаблон типа (Item:\s*)(\d+)([.;]), вам нужно будет использовать return "{0}{1}{2}".format(match.group(1),str(int(match.group(2))+2000), match.group(3)). Или return "{}{}{}".format(match.group(1),str(int(match.group(2))+2000), match.group(3)).

...