搜索并用正则表达式替换以增加 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
)。
我目前正在制作一个大型 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++来执行这些替换。
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
)。