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

search and replace with regex to increment numbers in Visual Studio Code

我目前正在制作一个大型 svg 精灵。 不同的图像总是相隔 2000 像素。

我有的是:

<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 的解释吗? 我希望我之后能理解它,这样我就可以涉足该主题。 我也很高兴只链接到一般教程或我的特定用例。

非常感谢:)

在 VSCode 中,您不能在 match/capture 中替换为增量值。您只能在作为替换参数传递给正则表达式替换 function/method.

的回调函数中执行此操作

您可以在安装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)

参见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)).

SublimeText3 加上 Text-Pastry add-in 也可以做 \i

我写了一个扩展,Find and Transform,使这些数学运算在查找和替换为正则表达式时非常简单(更像路径变量、条件、字符串运算等)。在这种情况下,此键绑定(在您的 keybindings.json 中)将执行您想要的操作:

{
  "key": "alt+r",                  // whatever keybinding you want
  "command": "findInCurrentFile",
  "args": {
    
    "find": "(?<=translate\(\d+,\s*)(\d+)",  // double-escaped
    
    "replace": "$${ return  + 2000 }$$",
    
    "isRegex": true,

    // "restrictFind": "document",  // or line/once/selections/etc. 
  }
}

这也可以是您 settings.json 中的一个设置,如果您需要的话 - 请参阅自述文件。

(?<=translate\(\d+,\s*) 一个积极的回顾,你可以在回顾中使用 non-fixed 长度的项目,比如 \d+.

(\d+) 捕获组 1

替换:$${ return + 2000 }$$

$${ <your string or math operation here> }}$

return + 2000 将 2000 添加到捕获组 1

演示:

您可以使用扩展程序 Regex Text Generator

  • Select 带有多光标的数字,可以使用 Regex Find 和 Alt+Enter 在查找框中完成
  • 运行命令:根据正则表达式生成文本
  • 作为Match Expression使用:(\d+)
  • 作为生成器表达式使用:{{=N[1]+2000}}
  • 您可以预览结果。
  • 如果确定,请按Enter,或Esc放弃

您可以在设置 regexTextGen.predefined

中将此类搜索替换设置为预定义
  "regexTextGen.predefined": {
    "Add/Subtract a number" : {
      "originalTextRegex": "(\d+)",
      "generatorRegex": "{{=N[1]+1}}"
    }
  }

如果您选择预定义的,您可以编辑表达式(更改 1)。