2014-11-14 51 views
0

我發現很多引用替換正則表達式,但我找不到一種方法來做我確切需要的。替換值-1在記事本+ + +

例如我有大約15k位的代碼我需要改變所有需要-1他們的當前值的TXT。

is_magic = 0 mp_consume2 = 9

在這種情況下9將需要有數以千計的這些測距中從值6到250 is_magic定義其類型被改變爲8和需要包括或這些更改將應用​​於不需要更改的其他組。

我試過各種正則表達式和通配符的例子,但總是以某種方式,形狀或形式破壞文件,並開始失去頭髮。也許這不能用Notepad ++來完成?

+0

正則表達式在這裏可能還不夠,因爲它不具備數學能力。你可以用'perl'解析文件,用'regex'提取數字並在'regex'之外執行計算。 – Nemesis 2014-11-14 16:29:46

回答

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; 
} 

有趣的部分是es/.../.../e內。這意味着替代是一個表達。表達式是兩個字符串的連接(使用.)。右邊的字符串通過範圍檢查匹配的數字並在範圍內遞減,否則保持不變。