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

Regex 用于将数字替换为2*数字-1的正则表达式。用于替换文件名,regex,digit,Regex,Digit,我需要正则表达式来将文件名中的数字乘以2,再减去1。 例如:filename12.pdf应该变成filename23.pdf filename225.pdf应成为filename449.pdf 请帮助我学习正则表达式。正则表达式通常不能进行计算,但它可以帮助您捕获数字。您可以使用replace的回调。下面是C#,例如: Helper方法(我们可以使用lambda,但它不太漂亮): 正则表达式替换: String fileName = "filename23.pdf"; fileName = Re

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


请帮助我学习正则表达式。

正则表达式通常不能进行计算,但它可以帮助您捕获数字。您可以使用replace的回调。下面是C#,例如:

Helper方法(我们可以使用lambda,但它不太漂亮):

正则表达式替换:

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

这里需要注意的一点是,该字符串可能表示一个太大的整数(因此无法解析)。而且,
i*2-1
可能会溢出,导致负数。您可以使用块或(与.Net 4一起使用)。

正则表达式通常无法进行计算,但它可以帮助您捕获数字。您可以使用replace的回调。下面是C#,例如:

Helper方法(我们可以使用lambda,但它不太漂亮):

正则表达式替换:

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

这里需要注意的一点是,该字符串可能表示一个太大的整数(因此无法解析)。而且,
i*2-1
可能会溢出,导致负数。您可以使用块,也可以使用(与.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";

下面是一种在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";

正则表达式可能因语言而异……您正在使用的任何特定语言?Enggr,正如DhruvPathak所提到的,您尚未“接受”您的任何问题的正式答案,但“用于将XSL的所有行和列转换为导出到Excel的XSL”除外。动态循环。请重新查看一些旧问题并选择您最喜欢的答案。这将激励其他人回答你的问题。最后,请指定此问题的编程语言。regex可能会因语言而异…您使用的任何特定语言?Enggr,如DhruvPathak所述,您尚未“接受”任何问题的正式答案,但“用于将XSL的所有行和列转换为Excel的XSL”除外。动态循环。请重新查看一些旧问题并选择您最喜欢的答案。这将激励其他人回答你的问题。最后,请指定此问题的编程语言。