0

我需要将文件名中的数字乘以 2 并减去 1 的正则表达式。例如:filename12.pdf 应变为 filename23.pdf filename225.pdf 应变为 filename449.pdf

请帮助我使用正则表达式。

4

2 回答 2

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)。

于 2011-02-17T06:14:53.570 回答
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";
于 2011-02-17T12:44:19.853 回答