Mit Regex schauen,dass wenn ich den string "asdoiuoidjqkbiudqeh" hab, ob Buchstabe i zu einer geraden Anzahl vorkommt? Gerade Anzahl meint 0x oder gerade?
Ein User hat mri vorhin geholfen und das gegeben
^[^i]*((i[^i]*){2})*$
Das klappt auch wunderbar, aber geht das auch ohne diese ^ mittendrin und leichtverständlicher? FInde das doch arg schwer so zu verstehen, was da vorgeht. Kennt da jemand eine einfacher aussehende Variante?
1 Antwort
Wie ich schon bei der anderen Frage geschrieben habe:
Vielleicht solltest Du dich mit den Regex-Grundlagen beschäftigen.
Durch fragen, funktioniert bei Regex nicht, dafür ist die Syntax zu komplex.
Und ja, geht auch ohne das "^" mittendrin, das macht das Pattern aber nur noch komplexer. Und wenn Du schon Schwierigkeiten mit dem "^" hast, dann wirst mit Regex erst recht nicht zurecht kommen - das ist nämlich eines der einfachsten Features.
Eine zusammenhängende Menge ist mit Regex kein Problem, oder man erlaubt nur Gruppen mit gerader Anzahl. Alle nicht zusammenhängenden Vorkommen zu zählen bzw. die Anzahl zu prüfen ist aber nicht möglich. Man braucht am Ende immer noch eine extra Programmiersprache und wenn man die hat, braucht man kein Regex mehr.
Korrigiere: Geht doch.
Man braucht eine Gruppe, die genau ein "i" und drum herum eine beliebige Anzahl anderer Zeichen erlaubt. Diese Gruppe kann man dann zählen.
^(?:(?:[^i]*i[^i]*){2})*$
Wenn auch kein Vorkommen erlaubt werden soll:
^(?:(?:(?:[^i]*i[^i]*){2})*|[^i]*)$
Es bleibt trotzdem ein unsinniges Vorhaben.
Hast recht - hab mich bei meinen Tests wohl verzählt.
Tatsächlich hat er in etwas das gleiche wie ich, nur leicht anders, danke für die Korrektur.
Ich habe den Part aus der Antwort entfernt.
Und ja, praxisfern ist es, aber nicht nur wegen dem, was Du sagst, sondern auch, weil man es super leicht mit gängigen Programmiersprachen und komplett ohne Regex lösen kann.
Und der Wille, Regex zu lernen, scheint hier ja nicht gegeben zu sein, da kann ich mir eigentlich nur noch eine sehr unsinnige Schulaufgabe vorstellen.
Das geht aber auch nicht ganz, wenn ich z. B. den String "uq" habe müsste es mir ja auch true anzeigen, also matchen, weil ich ja kein x habe somit 0 gerade
Wie mache ich das, ich alles erlaube außer i?
Vielleicht solltest Du dich mit den Regex-Grundlagen beschäftigen.
Durch fragen, funktioniert bei Regex nicht, dafür ist die Syntax zu komplex.
Zitat von mir - s.o.
Wie mache ich das, ich alles erlaube außer i?
Mein Pattern oben nutzt das mehrfach. Das "^", was Du nicht haben willst.
Aso dafür ist das da !!! Wie nutze ich das dann aber?
Vielleicht solltest Du dich mit den Regex-Grundlagen beschäftigen.
Durch fragen, funktioniert bei Regex nicht, dafür ist die Syntax zu komplex.
Zitat von mir - s.o.
hahahahahahha wäre |^i korrekt? Also dein code und | ^i Weil damit sage ich ja nicht i oder?
Aber wenn ich sag enicht i ist korrekt, dann werden doch auch alle anderen sachen korrekt, wo z. B. i 1x vorkommt
Vielleicht solltest Du dich mit den Regex-Grundlagen beschäftigen.
Durch fragen funktioniert bei Regex nicht, dafür ist die Syntax zu komplex.
Zitat von mir - s.o.
Ja, habe ich, aber keine AHnung komme nicht drauf
Nein, hast Du nicht, deine Fragen sind nämlich alle absolutes Basis-Wissen, das man so 1zu1 nachlesen kann. Oder das, was Du dir angeschaut hast, war einfach schlecht - kommt ja leider häufiger vor.
Mir hat damals dieser Artikel sehr geholfen:
[Artikel] Regex-Tutorial | myCSharp.de
Bedenke aber, dass es für Regex mehrere Dialekte gibt.
Wie man den Dialekt von .NET nennt (wenn er einen eigenen Namen hat), weiß ich nicht, aber bisher hat es immer mit PCRE2 gepasst.
Alle nicht zusammenhängenden Vorkommen zu zählen bzw. die Anzahl zu prüfen ist aber nicht möglich. Man braucht am Ende immer noch eine extra Programmiersprache und wenn man die hat, braucht man kein Regex mehr.
Zitat von mir - s.o.
Geht es in KOmbination mit regex und eienr Programmiersprache?
Alle nicht zusammenhängenden Vorkommen zu zählen bzw. die Anzahl zu prüfen ist aber nicht möglich. Man braucht am Ende immer noch eine extra Programmiersprache und wenn man die hat, braucht man kein Regex mehr.
Zitat von mir - s.o.
Und Spoiler:
Es geht auch nur mit einer Programmiersprache ohne Regex und so sollte man es auch tun.
Ich habe mich aber auch geirrt, es geht doch - ist oben ergänzt.
Was genau funktioniert denn mit dem Pattern von Apeirogon nicht? Hast Du eine Beispielzeichenkette mit einer geraden Anzahl "i", oder einer ungeraden Anzahl "i", bei welcher das Regex-Resultat für eine gerade Anzahl "i" fälschlicherweise keinen Match oder für eine ungerade Anzahl "i" fälschlicherweise einen Match anzeigt? Das Beispiel, das Du auf regex101.com gepostet hast, ergibt bei drei Vorkommen von "i" keinen Match, und das wäre dann ja so, wie es verlangt wurde.
Ansonsten finde ich die Aufgabenstellung ein wenig praxisfern, weil kein Vorkommen von "i" im String (resp. der leere String) gleich wie eine gerade Anzahl von "i" behandelt werden soll. Damit wird die Existenz von "i" mit deren gerader oder ungerader Anzahl Vorkommnisse vermischt. Eine typische Situation für sich einschleichende und mitunter nicht leicht zu findende Programmierfehler.