正则表达式将数字替换为2 *数字-1。用于替换文件名

我需要正则表达式将文件名中的数字乘以2并减去1。  例如:filename12.pdf应该成为filename23.pdf filename225.pdf应该成为filename449.pdf 请帮我正则表达式。     
已邀请:
正则表达式通常不能进行计算,但它可以帮助您捕获数字。您可以使用replace的回调。这是C#,例如: Helper方法(我们可以使用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)。     
以下是在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";
    

要回复问题请先登录注册