C#: Eingegebener Text soll erkannt und wenn bestimme Wörter vorhanden sind, sollen diese ausgegeben werden?

2 Antworten

Vom Fragesteller als hilfreich ausgezeichnet

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.

Woher ich das weiß:Berufserfahrung
YeetmasterNr1 
Fragesteller
 09.01.2022, 22:55

Danke dir werde es morgen nach der Arbeit mal ausprobieren:). Auch Danke für die Erklärungen. Im Moment blicke ich da noch nicht ganz durch aber wenn ich mich morgen damit vertiefe werde ich bestimmt einiges mehr verstehen.

0
  1. sPattern ist keine Liste sondern nur ein String (Liste wäre das List<string>)
  2. Am einfachsten wäre es wenn du jedes Element von sPattern mit foreach und if auf deine Eingabe überprüfst ( ohne Regex:

foreach (string s in list)

{

If (s == nameStadt)

{

}

}

Hoffe das hilft.

Woher ich das weiß:Hobby