0

ファイル名の数字を 2 倍して 1 を引くための正規表現が必要です。

正規表現について教えてください。

4

2 に答える 2

3

通常、正規表現は計算を実行できませんが、数値を取得するのに役立ちます。replace のコールバックを使用できます。たとえば、C# は次のようになります。

ヘルパー メソッド (ラムダを使用することもできましたが、あまりきれいではありません):

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 に答える