English 中文(简体)
在替换中使用捕获的数字之前,在正则表达式中进行计算。
原标题:
  • 时间:2009-03-14 17:31:59
  •  标签:

使用正则表达式,我能够找到一堆我想替换的数字。然而,我想用原始捕获的数字计算出另一个数字来替换它。

在Notepad++中使用替换部分的表达式是否可能?

编辑:也许是个奇怪的想法,但是计算可以在搜索部分完成,生成第二个捕获的数字,实际上就是结果吗?

最佳回答

即使这是可能的,它几乎肯定会变得“混乱”-为什么不用一个简单的脚本来做替换呢?例如..

#!/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

回复Jeroen的评论:

我实际上很感兴趣,是否正则表达式本身存在这种可能性,因为它们非常普遍。

一个正则表达式实际上只是一个简单的模式匹配语法。要做比搜索/替换匹配更高级的任何操作,都将由文本编辑器自己实现,但这种语法的实用性非常有限,可以通过大多数编辑器支持的脚本实现(Notepad++ 有一个插件系统,虽然我不知道它使用起来是否容易)。

基本上,如果正则表达式/搜索和替换功能不能实现您想要的功能,我会建议使用编辑器的脚本能力或使用外部脚本。

问题回答

在Notepad++中,使用替换部分的某种表达式可能吗?

正则表达式匹配的插值评估是相对较高级的功能,我不太可能在通用文本编辑应用程序中找到这个功能。我玩了一下Notepad ++,但无法使其工作,也找不到任何文档表明这是可能的。

嗯……我建议使用AWK来完成这个。

将此翻译成中文:http://en.wikipedia.org/wiki/AWK AWK

Notepad++ 具有有限的正则表达式内建。有一些扩展可以增加正则表达式查找和替换的功能,但我发现它们难以使用。我建议写一个小的外部程序来代替。Ruby、Perl 或 Python 都非常适合做这件事。如果你懂这些语言的话。我使用 Ruby 并且已经取得了很多成功。





相关问题
热门标签