在 Visual Studio Code 中搜索并替换为正则表达式以递增数字

问题描述 投票:0回答:4
regex search replace visual-studio-code increment
4个回答
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)

请参阅 正则表达式演示

注:

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


4
投票

我编写了一个扩展,查找和转换,使查找和替换正则表达式的数学运算变得非常简单(更像路径变量、条件、字符串操作等)。在这种情况下,这个键绑定(在您的

keybindings.json
中)将执行您想要的操作:

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

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

如果您愿意,这也可以是您的

settings.json
中的设置 - 请参阅自述文件。

(?<=translate\\(\\d+,\\s*)
积极的lookbehind,您可以在lookbehind中使用非固定长度的项目,例如
\\d+

(\\d+)
捕获组 1

替换:

$${ return $1 + 2000 }$$

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

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

演示:


0
投票

SublimeText3 与 Text-Pastry 插件也可以做 \i


0
投票

您可以使用我制作的扩展:Regex Text Generator

  • 使用多光标选择数字,可以使用正则表达式查找和查找框中的
    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
)。

© www.soinside.com 2019 - 2024. All rights reserved.