2008-11-13 19 views

Respuesta

11

comprobación de errores dejó como un ejercicio ...

 Regex regex = new Regex(@"\d+"); 
     MatchCollection matches = regex.Matches("changed from 1 to 10"); 
     int num1 = int.Parse(matches[0].Value); 
     int num2 = int.Parse(matches[1].Value); 
2

En su expresión regular, coloque los campos que desea registrar entre paréntesis, y luego use la propiedad Match.Captures para extraer los campos coincidentes.

Hay un ejemplo de C# here.

1

Use grupos de captura con nombre.

Regex r = new Regex("*(?<FirstNumber>[0-9]{1,2})*(?<SecondNumber>[0-9]{1,2})*"); 
string input = "changed from 1 to 10"; 
string firstNumber = ""; 
string secondNumber = ""; 

MatchCollection joinMatches = regex.Matches(input); 

foreach (Match m in joinMatches) 
{ 
    firstNumber= m.Groups["FirstNumber"].Value; 
    secondNumber= m.Groups["SecondNumber"].Value; 
} 

Obtener Expresson para ayudarle a cabo, tiene una opción de exportación a C#.

RENUNCIA: expresión regular no es probablemente la correcta (mi copia de expresso expiró: D)

4

Coincidencia exactamente con la cadena "cambiado de X a Y":

string pattern = @"^changed from ([0-9]+) to ([0-9]+)$"; 
Regex r = new Regex(pattern); 
Match m = r.match(text); 
if (m.Success) { 
    Group g = m.Groups[0]; 
    CaptureCollection cc = g.Captures; 

    int from = Convert.ToInt32(cc[0]); 
    int to = Convert.ToInt32(cc[1]); 

    // Do stuff 
} else { 
    // Error, regex did not match 
} 
+0

r.La captura debe ser en mayúscula 'M'. Este ejemplo me da una System.InvalidCastException cuando lo pruebo: No se puede convertir System.Text.RegularExpressions.Match en System.Iconvertible – Cros

+0

Esto falla porque está mirando CaptureCollection que es incorrecto. Este código coincidirá con tres grupos (el texto completo, las primeras parentesas y las segundas parenteses) con una captura cada uno. Entonces, el código en este ejemplo usa la coincidencia con el texto completo y un elemento fuera de rango. – Cros

+0

Además, al convertir desde un objeto Capture, debe usar Value-property. – Cros

0

Aquí es un fragmento de código que hace casi lo que quería:

using System.Text.RegularExpressions; 

string text = "changed from 1 to 10"; 
string pattern = @"\b(?<digit>\d+)\b"; 
Regex r = new Regex(pattern); 
MatchCollection mc = r.Matches(text); 
foreach (Match m in mc) { 
    CaptureCollection cc = m.Groups["digit"].Captures; 
    foreach (Capture c in cc){ 
     Console.WriteLine((Convert.ToInt32(c.Value))); 
    } 
} 
Cuestiones relacionadas