2009-10-17 17 views
8

Estoy convirtiendo el código de Java en C# y necesito reemplazar el uso de expresiones regulares de Java. Un uso típico es¿Cuál es el equivalente de C# de java.util.regex?

import java.util.regex.Matcher; 
import java.util.regex.Pattern; 
//... 

String myString = "B12"; 
Pattern pattern = Pattern.compile("[A-Za-z](\\d+)"); 
Matcher matcher = Pattern.matcher(myString); 
String serial = (matcher.matches()) ? matcher.group(1) : null; 

que debe extraer un grupo de captura de una cadena de destino coincidente. Estaría agradecido por ejemplos simples.


EDITAR: He añadido el equivalente C# del código como una respuesta.

EDIT: Here is a tutorial en el uso de las expresiones reales.

EDITAR: (. Y Perl) Here is a useful comparison de C# y Java

+0

@Mehrdad gracias. Eso es exactamente lo que quería, aunque la pregunta obtuvo un voto negativo de algún lado (tal vez un duplicado, aunque traté de buscar SO) –

+0

No sé. No fui yo Por lo general, los drogadictos no reciben votos a la baja. Se cierran –

+2

@Jason: ¿Y tu punto es? ¿Que las personas no deberían ser capaces de encontrar las respuestas que necesitan en StackOverflow? ¿Que deberían probar suerte en Google, donde podrían encontrar las respuestas incorrectas? SO * * fue el lugar para encontrar las respuestas a las preguntas de programación. Google no. – jalf

Respuesta

5

creé el equivalente C# del código Java en la pregunta:

string myString = "B12"; 
Regex rx = new Regex(@"[A-Za-z](\\d+)"); 
MatchCollection matches = rx.Matches(myString); 
if (matches.Count > 0) 
{ 
    Match match = matches[0]; // only one match in this case 
    GroupCollection groupCollection = match.Groups; 
    Console.WriteLine("serial " + groupCollection[1].ToString()); 
} 

EDITAR (Ver @ votos comentarios de mehrdad)

El código original fue:

// ... 

MatchCollection matches = rx.Matches(myString); 
foreach (Match match in matches) 
{ 
    GroupCollection groupCollection = match.Groups; 
    Console.WriteLine("serial " + groupCollection[1].ToString()); 
} 
+0

Deberías asegurarte de que realmente hay una coincidencia antes de intentar acceder a 'matches [0]'. De lo contrario, obtendrás un 'IndexOutOfRangeException'. –

+0

@Mehrdad gracias. Lo tenía en un bucle foreach que era seguro y luego traté de simplificarlo. He editado –

+0

Sí, si lo está usando en un 'foreach', es mejor ** no hacer referencia 'Count' ** de antemano, ya que hará que' Regex' se evalúe inmediatamente (a diferencia de la evaluación perezosa que obtiene con 'foreach') –

Cuestiones relacionadas