【问题标题】:Is it Possible to Perform Addition in a Regex?是否可以在正则表达式中执行加法?
【发布时间】:2012-03-08 13:26:04
【问题描述】:

假设占位符 $2 填充了一个整数,是否可以将其增加 1?:

var strReplace = @"$2";
Regex.Replace(strInput, @"((.)*?)", strReplace);

【问题讨论】:

标签: asp.net regex


【解决方案1】:

您可以将Regex.Replace 的回调版本与MatchEvaluator 一起使用,请参阅以下示例:

这是一个示例 (ideone):

using System;
using System.Text.RegularExpressions;

class Program
{
    static string AddOne(string s)
    {
        return Regex.Replace(s, @"\d+", (match) =>
        {
            long num = 0;
            long.TryParse(match.ToString(), out num);
            return (num + 1).ToString();
        });
    }

    static void Main()
    {
        Console.WriteLine(AddOne("hello 123!"));
        Console.WriteLine(AddOne("bai bai 11"));
    }
}

输出:

hello 124!
bai bai 12

【讨论】:

    【解决方案2】:

    在标准(CS 理论)正则表达式中,使用正则表达式是不可能的。

    但是,Perl 等对正则表达式有扩展,这对它们的行为有影响,而且我对它们不够熟悉,无法肯定地说扩展的正则表达式不会这样做,但我相当确定这种行为正则表达式是不可能的。

    【讨论】:

      【解决方案3】:

      使用标准正则表达式是不可能的,但如果您编写自定义 MatchEvaluator,则可以。

      string str = "Today I have answered 0 questions on StackOverlow.";
      string pattern = @"\w*?(\d)";
      var result = Regex.Replace(str, pattern, 
                         m => (int.Parse(m.Groups[0].Value)+1).ToString() );
      Console.WriteLine(result);
      

      今天我在 StackOverlow 上回答了 1 个问题。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2021-03-09
        • 2018-01-16
        • 1970-01-01
        • 1970-01-01
        • 2021-12-02
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多