代码之家  ›  专栏  ›  技术社区  ›  jeroen

在替换之前,在正则表达式中计算捕获的数字

  •  2
  • jeroen  · 技术社区  · 17 年前

    使用正则表达式,我可以找到一组我想要替换的数字。但是,我想用另一个使用原始-捕获-数字计算的数字替换该数字。

    在notepad++中,在替换部件中使用一种表达式,这可能吗?

    也许是一个奇怪的想法,但计算可以在搜索部分完成,生成第二个捕获的数字,这将有效地作为结果吗?

    4 回复  |  直到 17 年前
        1
  •  3
  •   dbr    17 年前

    即使是

    #!/usr/bin/env ruby
    f = File.new("f1.txt", File::RDWR)
    contents = f.read()
    
    contents.gsub!(/\d+/){|m|
      m.to_i + 1 # convert the current match to an integer, and add one
    }
    
    f.truncate(0) # empty the existing file
    f.seek(0) # seek to the start of the file, before writing again
    f.write(contents) # write modified file
    f.close()
    

    …以及输出:

    $ cat f1.txt
    This was one: 1
    This two two: 2
    $ ruby replacer.rb
    $ cat f1.txt
    This was one: 2
    This two two: 3
    

    正则表达式实际上只是一种简单的模式匹配语法。要做比搜索/替换匹配项更高级的事情,将取决于文本编辑器,但其有用性非常有限,可以通过大多数编辑器允许的脚本来实现( Notepad++

    基本上,如果regex/search和replace无法实现您想要的功能,我会说要么使用编辑器的脚本编写能力,要么使用外部脚本。

        2
  •  3
  •   John Feminella    17 年前

    在notepad++中,在替换部件中使用一种表达式,这可能吗?

    正则表达式匹配的插值求值是一个相对高级的功能,我可能不希望在通用文本编辑应用程序中找到它。我用Notepad++玩了一会儿,但没能让它工作,在文档中也找不到任何东西表明这是可能的。

        3
  •  2
  •   SunnyRed    13 年前

    六羟甲基三聚氰胺六甲醚。。。我不得不推荐AWK来做这件事。

    http://en.wikipedia.org/wiki/AWK

        4
  •  1
  •   Andrew Redd    17 年前

    推荐文章