2009-04-10 12 views
26

Tengo un archivo XML que contiene uno (o más) pares clave/valor. Para cada uno de estos pares, quiero extraer el valor que es un valor hexadecimal de dos bytes.¿Cómo extraer una subcadena de .NET RegEx?

Así que el código XML contiene este fragmento:

<key>LibID</key><val>A67A</val> 

Qué puedo coincidir con la siguiente expresión, con la identificación entre paréntesis.

Match match = Regex.Match(content, @"<key>LibID</key><val>([a-fA-F0-9]{4})</val>"); 

if (match.Success) 
{ 
    Console.WriteLine("Found Match for {0}\n", match.Value); 
    Console.WriteLine("ID was {0}\n", "Help me SO!"); 
} 

¿Cómo puedo cambiar la última parte para que devuelva la identificación del partido?

¡Salud!

Respuesta

48

Creo que quieres

match.Groups[1].Value 

(Como Dillie-O señala en los comentarios, que es el grupo 1, porque el grupo 0 es siempre todo el partido.)

programa de pruebas a corto pero completo:

using System; 
using System.Text.RegularExpressions; 

class Program 
{ 
    static void Main() 
    { 
    Regex regex = new Regex("<key>LibID</key><val>([a-fA-F0-9]{4})</val>"); 
    Match match = regex.Match("Before<key>LibID</key><val>A67A</val>After"); 

    if (match.Success) 
    { 
     Console.WriteLine("Found Match for {0}", match.Value); 
     Console.WriteLine("ID was {0}", match.Groups[1].Value); 
    }  
    } 
} 

salida:

Found Match for <key>LibID</key><val>A67A</val> 
ID was A67A 
+2

Dale un golpe. Ya está usando una coincidencia agrupada allí, Andrew, por lo que puede extraer fácilmente el valor agrupado. Ah, y para el registro, el índice 0 contiene toda la cadena, es por eso que verifica el índice 1. –

+0

Gracias súper. Sabía que estaba en algún lado, simplemente no sabía dónde :) –

+0

@ Dillie-O: Buen punto, lo he incluido en una edición. –

1

Añadir un grouping construct a su expresión ...

<key>(?<id>LibID)</key><val>([a-fA-F0-9]{4})</val> 

que capturará el ID. Pero, debes poner el formato correcto en tu expresión para la identificación real, porque tu expresión regular solo capturará "LibID" literalmente.

+1

Creo que por "ID" Andrew significa el contenido del elemento , no el elemento . –

Cuestiones relacionadas