Schauen wir uns erstmal den aktuellen Code an:
Console.WriteLine("Geben Sie die Stadt an.");
string n1 = Console.ReadLine();
string sPattern = "Hamburg; Berlin; Köln"; //Das ist kein RegEx Pattern. Ein gültiges Pattern sieht so aus: ([A-R])\w+ (matcht alle Buchstaben von A-R)
foreach (string s in n1) ; // eine foreach Schleife benötigt einen {} Block. Zum anderen geht die aktuelle Schleife alle Buchstaben (chars) in n1 durch. Diese ist für deinen Zweck nicht nötig.
Console.WriteLine($"{string,24}"); //dies funktioniert so nicht, string ist ein Datentyp und keine Variable.
{//diese Klammer müsste über Console.WriteLine
if (System.Text.RegularExpressions.Regex.IsMatch(sPattern, System.Text.RegularExpressions.RegexOptions.IgnoreCase))
//in der Funktion fehlt ein Parameter, IsMatch(String, String, RegexOptions)
}
else
{
Console.WriteLine("Stadt konnte nicht gefunden werden")
}
Zum Lösungsansatz:
Regex in Verbindung mit Pattern verwendet man, um Eigaben zur parsen oder zur Textsuche.
https://de.wikipedia.org/wiki/Regul%C3%A4rer_Ausdruck#:~:text=Ein%20regul%C3%A4rer%20Ausdruck%20(englisch%20regular,allem%20in%20der%20Softwareentwicklung%20Verwendung.
Für deinen Zweck ist es ungeignet, da du nach eindeutigen Stadtnamen suchst.
Console.WriteLine("Geben Sie die Stadt an.");
string n1 = Console.ReadLine();
string[] listStaedte = { "Hamburg", "Berlin", "Köln" };
listStaedte = listStaedte.Select(s => s.ToLowerInvariant()).ToArray();
if (listStaedte.Contains(n1.ToLower()))
{
Console.WriteLine("Stadt gefunden!");
}
else
{
Console.WriteLine("Stadt nicht gefunden");
}
Ich habe es mal etwas umgebaut. Anstatt Regex setze ich auf einem Array. In diesem kannst du alle Städte eingeben.
Durch Select + ToLowerInvariant werden alle Strings im Array kleingeschrieben.
Danach verwende ich ".Contains" um zu prüfen, ob die Eingabe innerhalt des Array enthalten ist.
Durch ".ToLower" werden alle Buchstaben kleinzuschreiben. Dies verhindert, dass eine Eingabe wie "berLin" nicht erkannt wird.