Regex для замены числа на 2 * число -1.Используется для замены имен файлов - PullRequest
0 голосов
/ 17 февраля 2011

Мне нужно регулярное выражение для умножения цифр в имени файла на 2 и вычитания 1. Например: filename12.pdf должно стать filename23.pdf filename225.pdf должно стать filename449.pdf

Пожалуйста, помогите мне срегулярное выражение.

Ответы [ 2 ]

3 голосов
/ 17 февраля 2011

Регулярное выражение обычно не может делать вычисления, но оно может помочь вам захватить число. Вы можете использовать обратный вызов замены. Вот C #, например:

Вспомогательный метод (мы могли бы использовать лямбду, но он менее красив):

public string CalculateNumber(Match match)
{
    int i = Convert.ToInt32(match.Value);
    i = i * 2 - 1;
    return i.ToString();
}

Regex заменяет:

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

Важным примечанием здесь является то, что строка может представлять слишком большое целое число (поэтому она не будет анализироваться). Кроме того, i*2-1 может переполниться, что приведет к отрицательному числу. Вы можете использовать checked блок или BigInteger (с .Net 4).

2 голосов
/ 17 февраля 2011

Вот способ сделать это в 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";
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...