【问题标题】:Regex for replacing the number by 2* the number -1. Used for replacing file names用 2* 数字 -1 替换数字的正则表达式。用于替换文件名
【发布时间】:2011-02-17 06:04:11
【问题描述】:

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

请帮我处理正则表达式。

【问题讨论】:

  • 正则表达式可能因语言而异...
  • 您使用的任何特定语言?
  • Enggr,正如 DhruvPathak 所提到的,除了“用于将 XSL 的所有行和列转换为Excel。动态循环。请重新审视您的一些较早的问题并选择您最喜欢的答案。这将激励其他人回答您的问题。最后,请指定此问题的编程语言。

标签: regex digit


【解决方案1】:

正则表达式通常不能进行计算,但它可以帮助您捕获数字。您可以使用替换回调。以 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)。

【讨论】:

    【解决方案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";
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-01-02
      • 2020-03-30
      • 1970-01-01
      • 2022-01-18
      • 2021-12-22
      • 1970-01-01
      • 2018-07-13
      相关资源
      最近更新 更多