Mit Regex schauen,dass wenn ich den string "asdoiuoidjqkbiudqeh" hab, ob Buchstabe i zu einer geraden Anzahl vorkommt? Gerade Anzahl meint 0x oder gerade?

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.

Woher ich das weiß:Berufserfahrung

davegarten  07.11.2021, 00:18

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.

0
Palladin007  07.11.2021, 00:24
@davegarten

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.

0
aisdqw8 
Beitragsersteller
 07.11.2021, 00:03

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

0
aisdqw8 
Beitragsersteller
 07.11.2021, 00:11
@Palladin007

Wie mache ich das, ich alles erlaube außer i?

0
Palladin007  07.11.2021, 00:14
@aisdqw8
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.

0
aisdqw8 
Beitragsersteller
 07.11.2021, 00:16
@Palladin007

Aso dafür ist das da !!! Wie nutze ich das dann aber?

0
Palladin007  07.11.2021, 00:18
@aisdqw8
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.

0
aisdqw8 
Beitragsersteller
 07.11.2021, 00:19
@Palladin007

hahahahahahha wäre |^i korrekt? Also dein code und | ^i Weil damit sage ich ja nicht i oder?

0
aisdqw8 
Beitragsersteller
 07.11.2021, 00:23
@Palladin007

Aber wenn ich sag enicht i ist korrekt, dann werden doch auch alle anderen sachen korrekt, wo z. B. i 1x vorkommt

0
Palladin007  07.11.2021, 00:25
@aisdqw8
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.

0
aisdqw8 
Beitragsersteller
 07.11.2021, 00:32
@Palladin007

Ja, habe ich, aber keine AHnung komme nicht drauf

0
Palladin007  07.11.2021, 00:37
@aisdqw8

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.

0
aisdqw8 
Beitragsersteller
 06.11.2021, 23:46

hmm und wie würde das korrekt aussehen?

0
Palladin007  06.11.2021, 23:51
@aisdqw8
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.

0
aisdqw8 
Beitragsersteller
 06.11.2021, 23:56
@Palladin007

Geht es in KOmbination mit regex und eienr Programmiersprache?

0
Palladin007  07.11.2021, 00:00
@aisdqw8
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.

0