替换值-1在Notepad ++中

时间:2014-11-14 16:27:45

标签: regex notepad++

我发现很多关于用正则表达式替换的参考文献,但我找不到一种方法来完成我需要的工作。

例如,我有大约15k位代码的txt,我需要将所有需要-1更改为当前值。

is_magic = 0 mp_consume2 = 9

在这种情况下,9需要更改为8.有数千个这些值的范围从6到250. is_magic定义其类型并需要包含或更改将应用​​于更改的其他组不需要。

我尝试了各种正则表达式和通配符示例,但总是以某种方式,形状或形式打破文件,并开始失去头发。也许这不能用Notepad ++来完成?

2 个答案:

答案 0 :(得分:0)

Regex不做数学。但是,一些强力方法和语言特定方法会产生结果。

Math operations in regex

答案 1 :(得分:0)

这可以在Perl中完成,并在替换中使用正则表达式。

问题不清楚每行是否只有一个数字要递减,也不清楚它是否是该行的最后一部分。以下是在Perl中执行减量的两种方法。

第一种方法在一行上处理多个数字。第二种方式只在开始的行上运行" is_magic = 0 mp_consume2 ="而且这个数字是他最后一部分。

use strict;
use warnings;

my $s = "is_magic = 0 mp_consume2 = 9 abc = 5 def = 6 ghi = 125 jkl = 250 zz\n";
print $s;
$s =~ s/ = (\d+)\b/" = " . ( $1 >= 6 && $1 <= 250 ? $1-1 : $1)/eg;
print $s;

my @t = ( "is_magic = 0 mp_consume2 = 9\n",
          "is_not_magic = 0 mp_consume2 = 9\n" );

foreach my $u ( @t )
{
    print "\n";
    print $u;
    $u =~ s/^(is_magic = 0 mp_consume2 = )(\d+)$/$1 . ( $2 >= 6 && $2 <= 250 ? $2-1 : $2)/e;
    print $u;
}

有趣的部分是e中的s/.../.../e。这意味着替换是一种表达。表达式是两个字符串的串联(使用.)。右手串是通过范围检查匹配的数字并在范围内递减来制作的,否则保持不变。