Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Regex 搜索并替换为正则表达式以在Visual Studio代码中递增数字_Regex_Search_Replace_Visual Studio Code_Increment - Fatal编程技术网

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

Regex 搜索并替换为正则表达式以在Visual Studio代码中递增数字,regex,search,replace,visual-studio-code,increment,Regex,Search,Replace,Visual Studio Code,Increment,我目前正在开发一个大型svg精灵。 不同的图像总是相距2000px 我得到的是: <g transform="translate(0,0)"> <g transform="translate(0,2000)"> <g transform="translate(0,4000)"> 在regex之后,只需将2000添加到第二个数字: <g transform="translate(0,2000)"> <g transform="transl

我目前正在开发一个大型svg精灵。 不同的图像总是相距2000px

我得到的是:

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

在regex之后,只需将2000添加到第二个数字:

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

我现在有一个问题,一些新的图像必须放在文档的顶部,这意味着我需要更改所有的数字,它们非常多

我在考虑使用正则表达式,甚至发现它可以在VS代码的搜索栏中工作。问题是我从来没有和任何正则表达式一起工作过,我有点困惑

有人能给我一个解决方案和解释,在2000年之前增加所有样本数吗? 我希望以后我能理解它,这样我就能进入那个话题了。 我也很高兴看到一般教程或我的特定用例的链接


非常感谢:)

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

在安装Python脚本插件后,您可以使用记事本++执行这些替换。然后使用以下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+)([;])
,您将需要使用
返回“{0}{1}{2}”。format(match.group(1)、str(int(match.group(2))+2000)、match.group(3))
,或者,
返回“{}{}{}”。format(match.group(1)、str(int(match.group(2))+2000),match.group(3))

不,这里需要一种成熟的语言。例如,Python可以很容易地做到这一点。如果您希望它也可以在Perl中实现。只需增加1是可能的,并且可能还可以编写
2000
的解决方法(它涉及到几个正则表达式替换),但一种通用的方法是获取所有匹配项,并使用替换方法作为替换参数,在替换结果返回到修改的字符串之前,您可以操作匹配项。以防万一,您可以使用Notepad++和Python脚本在指定上下文中递增任何数字,请参见。因为它是基本的。只需一个
和1+数字,没有什么要解释的。在您的情况下,只是不清楚要更改哪些数字以及在什么上下文中。您需要使用
(transform=“translate\(\d+,\s*)(\d+)
regex并将函数修改为
返回“{0}{1}”。format(match.group(1),str(int(match.group(2))+2000))