2009-12-05 11 views
20

Tengo cadenas de 15 caracteres de largo. Estoy realizando una coincidencia de patrones con una expresión regular. Quiero saber la posición de la subcadena donde la función IsMatch() devuelve verdadero.¿Hay alguna función que devuelva índice donde se inicie la coincidencia de RegEx?

Pregunta: ¿Hay alguna función que devuelva el índice de la coincidencia?

+0

¿Quiere decir el índice de una coincidencia _en_la cadena o el índice _de_ una cadena coincidente en una colección? –

+0

índice de coincidencia en la cadena ... – Royson

Respuesta

33

Para múltiples coincidencias que puede utilizar código similar al siguiente:

Regex rx = new Regex("as"); 
      foreach (Match match in rx.Matches("as as as as")) 
      { 
       int i = match.Index; 
      } 
7

Uso de ajuste en lugar de IsMatch:

Match match = Regex.Match("abcde", "c"); 
    if (match.Success) 
    { 
     int index = match.Index; 
     Console.WriteLine("Index of match: " + index); 
    } 

Salida:

Index of match: 2 
3
Regex.Match("abcd", "c").Index 

2 

Nota # En caso de comprobar el resultado de Match.success, debido a su retorno 0, y se puede confundir con la Posición 0, consulte la respuesta de Mark Byers. Gracias.

+0

Tenga en cuenta que esto devuelve 0 si la expresión regular no coincide, que probablemente no sea la que desea. Debería verificar match.Success primero (ver mi respuesta). –

+0

Thx para señalar. – YOU

-3
Console.Writeline("Random String".IndexOf("om")); 

Esta es la salida de un 4

un -1 indica que no hay partido

+1

Pregunta sobre "coincidencia de patrones con una expresión regular". 'IndexOf' no admite patrones, solo cadenas simples. –

0

En lugar de utilizar IsMatch(), el uso Matches:

 const string stringToTest = "abcedfghijklghmnopqghrstuvwxyz"; 
     const string patternToMatch = "gh*"; 

     Regex regex = new Regex(patternToMatch, RegexOptions.Compiled); 

     MatchCollection matches = regex.Matches(stringToTest); 

     foreach (Match match in matches) 
     { 
      Console.WriteLine(match.Index); 
     } 
Cuestiones relacionadas