我发现很多关于用正则表达式替换的参考文献,但我找不到一种方法来完成我需要的工作。
例如,我有大约15k位代码的txt,我需要将所有需要-1更改为当前值。
is_magic = 0 mp_consume2 = 9
在这种情况下,9需要更改为8.有数千个这些值的范围从6到250. is_magic定义其类型并需要包含或更改将应用于更改的其他组不需要。
我尝试了各种正则表达式和通配符示例,但总是以某种方式,形状或形式打破文件,并开始失去头发。也许这不能用Notepad ++来完成?
答案 0 :(得分:0)
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
。这意味着替换是一种表达。表达式是两个字符串的串联(使用.
)。右手串是通过范围检查匹配的数字并在范围内递减来制作的,否则保持不变。