Registrierung Kalender Mitgliederliste Teammitglieder Suche Häufig gestellte Fragen Zur Startseite

Informatiker Board » Themengebiete » Theoretische Informatik » Regulärer Ausdruck - Text muss 10 mal das Wort OK beinhalten » Hallo Gast [Anmelden|Registrieren]
Letzter Beitrag | Erster ungelesener Beitrag Druckvorschau | An Freund senden | Thema zu Favoriten hinzufügen
Neues Thema erstellen Antwort erstellen
Zum Ende der Seite springen Regulärer Ausdruck - Text muss 10 mal das Wort OK beinhalten
Autor
Beitrag « Vorheriges Thema | Nächstes Thema »
Dani
Jungspund


Dabei seit: 24.02.2016
Beiträge: 12

Regulärer Ausdruck - Text muss 10 mal das Wort OK beinhalten Auf diesen Beitrag antworten Zitatantwort auf diesen Beitrag erstellen Diesen Beitrag editieren/löschen Diesen Beitrag einem Moderator melden       Zum Anfang der Seite springen

Meine Frage:
Ein Programm gibt bei einer bestimmten Aktion einen Code aus. In diesem Code muss 10 mal das Word OK stehen, damit die Aktion abgeschlossen werden darf. Gibt es einen Regulären Ausdruck (Regular Expression), die einen Text durchsucht und überprüft, ob genau 10 mal das Wort OK im Text steht? Die OKs sind nicht direkt aneinander gereiht und vor und nach einem OK kann jedes beliebige Zeichen stehen. Ich würde mich freuen, wenn ihr mir weiterhelfen könntet.

Meine Ideen:
(OK)/g
gibt 10 Matches wieder.
Stehen aber nur 9 OKs im Text, gibt es 9 Matches wieder.
Ich benötige aber einen Regulären Ausdruck, der für den Text nur ein OK gibt, wenn 10 mal OK im Text vorkommt.

Dieser Beitrag wurde 1 mal editiert, zum letzten Mal von Dani: 24.02.2016 17:39.

24.02.2016 17:37 Dani ist offline E-Mail an Dani senden Beiträge von Dani suchen Nehmen Sie Dani in Ihre Freundesliste auf
eulerscheZahl eulerscheZahl ist männlich
Foren Gott


Dabei seit: 04.01.2013
Beiträge: 2.859

Auf diesen Beitrag antworten Zitatantwort auf diesen Beitrag erstellen Diesen Beitrag editieren/löschen Diesen Beitrag einem Moderator melden       Zum Anfang der Seite springen

Versuche mal das hier:
code:
1:
^([^O]|O[^K])*(OK([^O]|O[^K])*){10}$


__________________
Syntax Highlighting fürs Board (Link)
25.02.2016 16:21 eulerscheZahl ist offline Beiträge von eulerscheZahl suchen Nehmen Sie eulerscheZahl in Ihre Freundesliste auf
Dani
Jungspund


Dabei seit: 24.02.2016
Beiträge: 12

Auf diesen Beitrag antworten Zitatantwort auf diesen Beitrag erstellen Diesen Beitrag editieren/löschen Diesen Beitrag einem Moderator melden       Zum Anfang der Seite springen

Das schaut schon mal sehr gut aus! Vielen Dank.

Jetzt habe ich festgestellt, dass im Text noch weitere Begriffe sind, die OK beinhalten. Die OKs, die es abprüfen soll, haben davor und danach Anführungszeichen, also "OK"

Kann man das auch noch mit in die Regular Expression einbauchen, dass er nur die OKs mit Anführungszeichen abprüft?

Es soll also bei 10 mal "OK" eine positive Meldung / 1 Match geben.

Vielen Dank im Voraus

Grüße
25.02.2016 17:48 Dani ist offline E-Mail an Dani senden Beiträge von Dani suchen Nehmen Sie Dani in Ihre Freundesliste auf
eulerscheZahl eulerscheZahl ist männlich
Foren Gott


Dabei seit: 04.01.2013
Beiträge: 2.859

Auf diesen Beitrag antworten Zitatantwort auf diesen Beitrag erstellen Diesen Beitrag editieren/löschen Diesen Beitrag einem Moderator melden       Zum Anfang der Seite springen

Du kannst nicht plötzlich die Spielregeln ändern Forum Kloppe
Hast du meinen Regex verstanden?
([^O]|O[^K])* ist alles außer OK, also entweder etwas außer O oder ein O, den kein K folgt.
Das kannst du erweitern. Kann gut sein, dass es noch eine bessere Lösung gibt, aber ich weiß nicht wie.

__________________
Syntax Highlighting fürs Board (Link)
25.02.2016 17:52 eulerscheZahl ist offline Beiträge von eulerscheZahl suchen Nehmen Sie eulerscheZahl in Ihre Freundesliste auf
Dani
Jungspund


Dabei seit: 24.02.2016
Beiträge: 12

Auf diesen Beitrag antworten Zitatantwort auf diesen Beitrag erstellen Diesen Beitrag editieren/löschen Diesen Beitrag einem Moderator melden       Zum Anfang der Seite springen

Sorry ;-) Aber manchmal sieht man das erst, wenn man es ausprobiert.

Hab die Reg Ex mal abgeändert:

^([^"]|"[^O])*("OK"([^"]|"[^O])*){10}$

Scheint zu funktionieren, die Anzahl passt und die Reg Ex wirft nur 1 Match, wenn die Anzahl 10 in den geschweiften Klammern steht.

Allerdings schaut die nicht ganz so toll aus. Evtl. gibt es da noch eine andere Lösung, die tatsächlich den kompletten Ausdruck "OK" prüft?

Momentan gibt es nämlich jeweils 1 Match mit folgenden Varianten:

^([^"]|"[^O])*("O([^"]|"[^O])*){10}$
^([^"]|"[^O])*("OK([^"]|"[^O])*){10}$
^([^"]|"[^O])*("OK"([^"]|"[^O])*){10}$
25.02.2016 18:13 Dani ist offline E-Mail an Dani senden Beiträge von Dani suchen Nehmen Sie Dani in Ihre Freundesliste auf
Dani
Jungspund


Dabei seit: 24.02.2016
Beiträge: 12

Auf diesen Beitrag antworten Zitatantwort auf diesen Beitrag erstellen Diesen Beitrag editieren/löschen Diesen Beitrag einem Moderator melden       Zum Anfang der Seite springen

So einigermaßen habe ich deine Reg Ex verstanden:

([^O]|O[^K]) --> alles außer OK
* --> und das mit beliebig viel Text
(OK --> bis zum ersten OK
([^O]|O[^K])*){10} --> und dieses OK 10 Mal mit beliebig viel Text ohne OK hinter dem jeweiligen OK

Sprich wenn hinter dem letzten OK nicht beliebig viel Text kommen würde, oder sofort wieder ein OK, dann würde der Code nicht funktionieren?

Was bezweckt denn das ^ ganz zu Beginn und das $ zum Schluss für diesen Code?

Vielen vielen Dank für deine Hilfe!!!
25.02.2016 18:27 Dani ist offline E-Mail an Dani senden Beiträge von Dani suchen Nehmen Sie Dani in Ihre Freundesliste auf
eulerscheZahl eulerscheZahl ist männlich
Foren Gott


Dabei seit: 04.01.2013
Beiträge: 2.859

Auf diesen Beitrag antworten Zitatantwort auf diesen Beitrag erstellen Diesen Beitrag editieren/löschen Diesen Beitrag einem Moderator melden       Zum Anfang der Seite springen

Zitat:
Sprich wenn hinter dem letzten OK nicht beliebig viel Text kommen würde, oder sofort wieder ein OK, dann würde der Code nicht funktionieren?

Doch. * heißt ja beliebig viele. Also auch 0. Stünde da ein +, dann hättest du Recht.

Mir gefällt mein Regex auch nicht, eben weil er für längere Wörter ziemlich unhandlich wird.
Ich hatte es noch mit negative lookbehind probiert, aber nicht hinbekommen.

^ heißt, dass das der Anfang der Zeile ist. $ ist das Ende. Sonst hätte ein Ausdruck mit 11 OK ja einen Teilausdruck mit 10 OK.

__________________
Syntax Highlighting fürs Board (Link)
26.02.2016 06:09 eulerscheZahl ist offline Beiträge von eulerscheZahl suchen Nehmen Sie eulerscheZahl in Ihre Freundesliste auf
Dani
Jungspund


Dabei seit: 24.02.2016
Beiträge: 12

Auf diesen Beitrag antworten Zitatantwort auf diesen Beitrag erstellen Diesen Beitrag editieren/löschen Diesen Beitrag einem Moderator melden       Zum Anfang der Seite springen

Diese hier funktioniert auch, aber es zeigt auch ein Match, wenn mit der RegEx nach weniger als 10 OKs gesucht wird.

(.*?\"OK\"){10}

sprich im Text steht 10x "OK"

folgende RegEx haben ein Match:

(.*?\"OK\")
(.*?\"OK\"){0}
(.*?\"OK\"){1}
(.*?\"OK\"){2}
(.*?\"OK\"){3}
(.*?\"OK\"){...}
(.*?\"OK\"){8}
(.*?\"OK\"){9}
(.*?\"OK\"){10}
--> höher --> kein Match

^([^"]|"[^O])*("OK"([^"]|"[^O])*){10}$ liefert wirklich nur ein Match, wenn auch 10x "OK" im Text steht
26.02.2016 09:57 Dani ist offline E-Mail an Dani senden Beiträge von Dani suchen Nehmen Sie Dani in Ihre Freundesliste auf
eulerscheZahl eulerscheZahl ist männlich
Foren Gott


Dabei seit: 04.01.2013
Beiträge: 2.859

Auf diesen Beitrag antworten Zitatantwort auf diesen Beitrag erstellen Diesen Beitrag editieren/löschen Diesen Beitrag einem Moderator melden       Zum Anfang der Seite springen

code:
1:
^([^"]|"[^O])*("OK"([^"]|"[^O])*){10}$

wenn der Text ein "O enhält, das kein "OK" ist, dann findet der Regex es auch nicht.
Wenn schon, dann
code:
1:
^([^"]|"[^O]|"O[^K]|"OK[^"])*("OK"([^"]|"[^O]|"O[^K]|"OK[^"])*){10}$

Wobei mir da auch ein Problem aufgefallen ist: Wenn nach "O direkt "OK" kommt, also "O"OK", wird nicht korrekt gezählt.

__________________
Syntax Highlighting fürs Board (Link)
26.02.2016 10:17 eulerscheZahl ist offline Beiträge von eulerscheZahl suchen Nehmen Sie eulerscheZahl in Ihre Freundesliste auf
Dani
Jungspund


Dabei seit: 24.02.2016
Beiträge: 12

Auf diesen Beitrag antworten Zitatantwort auf diesen Beitrag erstellen Diesen Beitrag editieren/löschen Diesen Beitrag einem Moderator melden       Zum Anfang der Seite springen

Die Konstellation "O"OK" sollte so nicht vorkommen. Von daher schaut das nach der Top Lösung aus :-)

Herzlichen Dank!!!

Gott
26.02.2016 11:15 Dani ist offline E-Mail an Dani senden Beiträge von Dani suchen Nehmen Sie Dani in Ihre Freundesliste auf
Baumstruktur | Brettstruktur
Gehe zu:
Neues Thema erstellen Antwort erstellen
Informatiker Board » Themengebiete » Theoretische Informatik » Regulärer Ausdruck - Text muss 10 mal das Wort OK beinhalten