2012-03-08 12 views
5

Suponiendo que el marcador de posición $ 2 se rellena con un número entero, es posible incrementarlo en 1 ?:¿Es posible realizar la adición en un Regex?

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

Si está utilizando Javascript a continuación, tratar el siguiente http://stackoverflow.com/questions/423107/use-regexp-to-match-a-parenthetical-number-then-increment-it – PraveenVenu

Respuesta

4

Se puede utilizar una versión de devolución de llamada de Regex.Replace con un MatchEvaluator, ver ejemplos en:

He aquí un ejemplo (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")); 
    } 
} 

Salida:

hello 124! 
bai bai 12 
2

En estándar (CS teórico) expresiones regulares, es imposible con una expresión regular.

Sin embargo, Perl y tales tienen extensiones de expresiones regulares, lo que tiene implicaciones para su comportamiento, y no estoy lo suficientemente familiarizado con ellas para decir definitivamente que las expresiones regulares ampliadas no lo harán, pero estoy bastante seguro de que esto el comportamiento no es posible con una expresión regular.

+2

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

0

No es posible con una expresión regular estándar, pero puede hacerlo si lo escribir una MatchEvaluator personalizado.

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); 

Hoy he respondido a las preguntas 1 en StackOverlow.

Cuestiones relacionadas