2011-02-17 46 views
0

我需要的正則表達式2在文件名中的數字相乘,並減去1 爲如:filename12.pdf應該成爲filename23.pdf filename225.pdf應該成爲filename449.pdf正則表達式用於替換數字2 *數字-1。用於替換文件名

請用正則表達式來幫助我。

+2

正則表達式可能與語言的變化.. 。 – 2011-02-17 06:06:07

+0

您正在使用的任何特定語言? – 2011-02-17 06:08:11

回答

3

正則表達式通常不能進行計算,但它可以幫助您捕獲該數字。您可以使用替換回調。下面是C#,例如:

助手方法(我們可以使用一個lambda,但它不太漂亮):

public string CalculateNumber(Match match) 
{ 
    int i = Convert.ToInt32(match.Value); 
    i = i * 2 - 1; 
    return i.ToString(); 
} 

正則表達式替換:

String fileName = "filename23.pdf"; 
fileName = Regex.Replace(fileName, @"\d+", CalculateNumber); 

這裏一個重要的注意的是,字符串可能代表一個太大的整數(所以它不會解析)。此外,i*2-1可能會溢出,導致負數。您可以使用checked塊,或使用BigInteger(使用.Net 4)。

2

這裏是一個辦法做到這一點在Perl:

#!/usr/bin/perl 
use 5.10.1; 
use strict; 
use warnings; 

my $in = 'filename225.pdf'; 
$in =~ s/(\d+)/$1*2-1/e; 
say $in; 

輸出:

filename449.pdf 

或在PHP中:

function compute($matches) { 
    return $matches[1]*2-1; 
} 
$in = 'filename225.pdf'; 
$res = preg_replace_callback('/(\d+)/',"compute", $in);; 
echo $res,"\n";