是否可以在正则表达式中执行添加?

时间:2012-03-08 13:26:05

标签: asp.net regex

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

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

3 个答案:

答案 0 :(得分:4)

您可以将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

答案 1 :(得分:2)

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

然而,Perl等对正则表达式有扩展,这对他们的行为有影响,我对他们不太熟悉,肯定会说扩展的正则表达式不会这样做,但我很确定这种行为正则表达式是不可能的。

答案 2 :(得分:0)

使用标准正则表达式是不可能的,但如果您编写自定义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个问题。