2012-03-08 52 views
5

假定$ 2填充的整數佔位符,是能夠通過1?:是否可以在正則表達式中執行加法?

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

如果你正在使用JavaScript,然後再嘗試以下 http://stackoverflow.com/questions/423107/use-regexp-to-match-a-parenthetical-number-then-increment-it – PraveenVenu 2012-03-08 13:36:32

回答

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 
2

在標準(CS理論)的正則表達式增加它,這是不可能用正則表達式。

但是,Perl等對正則表達式有一些擴展,這會影響他們的行爲,我對他們不夠熟悉,不能肯定地說擴展正則表達式不會這樣做,但我相當肯定這個行爲是不可能的正則表達式。

+2

Perl:'s/\ d +/$&+ 1/eg' – Qtax 2012-03-08 13:39:56

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。

相關問題