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!