2011-02-17 77 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";