使用正则表达式搜索并替换以增加 Visual Studio Code 中的数字

Blu*_*vag 15 regex search replace increment visual-studio-code

我目前正在制作一个大型 svg 精灵。不同的图像始终相距 2000 像素。

我所拥有的是:

<g transform="translate(0,0)">
<g transform="translate(0,2000)">
<g transform="translate(0,4000)">
Run Code Online (Sandbox Code Playgroud)

在正则表达式想要这个之后,只需将 2000 添加到第二个数字上:

<g transform="translate(0,2000)">
<g transform="translate(0,4000)">
<g transform="translate(0,6000)">
Run Code Online (Sandbox Code Playgroud)

我现在遇到的问题是,一些新图像必须放在文档的顶部,这意味着我需要更改所有数字,而且它们相当多。

我正在考虑使用正则表达式,甚至发现它可以在 VS Code 的搜索栏中使用。问题是我从未使用过任何正则表达式,我有点困惑。

有人能给我一个解决方案并解释一下将所有样本数增加 2000 吗?我希望我之后能理解它,这样我就可以涉足这个话题了。我也很高兴只提供一般教程或我的特定用例的链接。

非常感谢 :)

Wik*_*żew 8

在 VSCode 中,您无法在匹配/捕获中替换为递增值。您只能在作为替换参数传递给正则表达式替换函数/方法的回调函数内执行此操作。

安装Python脚本插件后,您可以使用Notepad++来执行这些替换。按照这些说明操作,然后使用以下 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)
Run Code Online (Sandbox Code Playgroud)

请参阅正则表达式演示

笔记:

  • (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))