Saltar al contenido

Comodín de expresión regular

La guía o código que hallarás en este artículo es la solución más fácil y válida que encontramos a tu duda o problema.

Solución:

el comodín * es equivalente al patrón Regex ".*" (codicioso) o ".*?" (no codicioso), por lo que querrá realizar un string.Replace():

string pattern = Regex.Escape(inputPattern).Replace("\*", ".*?");

Nota la Regex.Escape(inputPattern) al principio. Ya que inputPattern puede contener caracteres especiales utilizados por Regex, debe escapar correctamente esos caracteres. Si no lo hace, su patrón explotaría.

Regex.IsMatch(input, ".NET"); // may match ".NET", "aNET", "FNET", "7NET" and many more

Como resultado, el comodín * se escapa a \*por lo que reemplazamos el comodín escapado en lugar del comodín en sí.


Para usar el patrón

puedes hacer cualquiera:

Regex.IsMatch(input, pattern);

o

var regex = new Regex(pattern);
regex.IsMatch(input);

Diferencia entre codiciosos y no codiciosos

La diferencia está en cuánto intentará coincidir el patrón.

Considera lo siguiente string: "hello (x+1)(x-1) world". Quieres hacer coincidir el soporte de apertura ( y el soporte de cierre ) así como cualquier cosa intermedia.

Codicioso solo coincidiría "(x+1)(x-1)" y nada más. Básicamente, coincide con la subcadena más larga que puede encontrar.

No codicioso coincidiría "(x+1)" y "(x-1)" y nada más. En otras palabras: las subcadenas más cortas posibles.

Acabo de escribir esto rápidamente (basado en Validate that a string contienen algunas palabras exactas)

    static void Main()
    
        string[] inputs = 
        
            "Project1 - Notepad", // True
            "Project2 - Notepad", // True
            "HeyHo - Notepad", // True
            "Nope - Won't work" // False
        ;

        const string filterParam = "Notepad";
        var pattern = string.Format(@"^(?=.*b - 0b).+$", filterParam);

        foreach (var input in inputs)
        
            Console.WriteLine(Regex.IsMatch(input, pattern));
        
        Console.ReadLine();
    

Deberías hacer esto:

string myPattern = "* - Notepad";
foreach(string currentString in myListOfString)
    if(Regex.IsMatch(currentString, myPattern, RegexOptions.Singleline)
        Console.WriteLine("Found : "+currentString);
    
}

Por cierto, vi que venías de Montreal, documentación adicional en francés + herramienta útil: http://www.olivettom.com/?p=84

¡Buena suerte!

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *