2012-03-08 18 views
5

Zakładając zastępczy $ 2 zaludniony z liczbą całkowitą, to jest możliwe, aby zwiększyć ją o 1 ?:Czy można wykonać dodatek w regeksie?

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

Jeśli używasz Javascript następnie spróbuj poniżej http://stackoverflow.com/questions/423107/use-regexp-to-match-a-parenthetical-number-then-increment-it – PraveenVenu

Odpowiedz

4

Można użyć wersji oddzwonienia z Regex.Replace z MatchEvaluator, patrz przykłady na:

Oto przykład (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")); 
    } 
} 

wyjściowa:

hello 124! 
bai bai 12 
2

w standardowych (CS teoretycznej) wyrażeń regularnych, jest to niemożliwe z wyrażenia regularnego.

Jednak Perl i takie mają rozszerzenia do wyrażeń regularnych, co ma wpływ na ich zachowanie, a ja nie jestem dostatecznie obeznany z nimi, aby zdecydowanie powiedzieć, że przedłużone wyrażenia tego nie zrobią, ale jestem dość pewny, że to zachowanie nie jest możliwe w przypadku wyrażenia regularnego.

+2

Perl: 's/\ d +/$ & + 1/eg' – Qtax

0

To nie jest możliwe ze standardowym wyrażenia regularnego, ale można jeśli piszesz własny 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); 

Dziś mam odpowiedziało na pytania 1 StackOverlow.

Powiązane problemy