Seite 1 von 1

Find all matches greedy

Verfasst: Montag 21. Februar 2022, 13:33
von Carlos123
Hallo zusammen,

Nehmen wir den folgenden string an:
"HA abc HAHA abc HAHAHA, abc HA"

Ich möchte folgendes matches:
['HA', 'HAHA', 'HAHAHA', 'HA']
Also alle vorkommen von mindestens einer Folge von HA

Ich habe es mit greedy Match, aber es klappt nicht

Code: Alles auswählen

Import re
Re.compile('(HA){1,3}')

Hab mit Stern, plus, Fragezeichen, es klappt einfach nicht...

Hat jemand einen Hinweis ?

Danke im voraus

Re: Find all matches greedy

Verfasst: Montag 21. Februar 2022, 13:43
von Sirius3
Wie sieht Dein exakter Code aus? Was suchst Du wie?
Kann es sein, dass Du Dir nicht den Match anschaust, sondern nur die Gruppe (HA)?

Code: Alles auswählen

re.findall("(?:HA)+", "HA abc HAHA abc HAHAHA, abc HA")
# ['HA', 'HAHA', 'HAHAHA', 'HA']

Re: Find all matches greedy

Verfasst: Montag 21. Februar 2022, 13:52
von Carlos123
Hi Sirius3,

Dein Code funktioniert in der Tat. Danke
Was ich in meinem code suche ist etwa kompliziert, also habe ich die Fragestellung vereinfacht.

In der Tat wird es noch komplizierter weil der Abstand von den HAs unterschiedlich sein kann, zum Beispiel:
HA abc HA Ha abc HA HA HA abc
Auch in diese Fall will ich die matchen..

Aber kannst du mir bitte zuerst die Bedeutung von" ?:" erklären...habe zwar ganze Kapitel und Videos über regular expressions gesehen aber nie sowas in der art geesehn ...

Vielen Dank

Re: Find all matches greedy

Verfasst: Montag 21. Februar 2022, 13:53
von Sirius3
Dafür gibt es doch die Dokumentation: https://docs.python.org/3/library/re.html

Re: Find all matches greedy

Verfasst: Montag 21. Februar 2022, 14:17
von derElch
Ohne regex und Case-Insensitive

Code: Alles auswählen

compare_value = "HA abc HAHA abc HAHAHA abc HA"
c = [elem for elem in compare_value.lower().split() if 'ha' in elem]
Edit: In der Zwischenzeit wurde ja auch schon im Bezug auf re geantwortet. Unter https://regex101.com/ kannst du es auch testen.

Re: Find all matches greedy

Verfasst: Montag 21. Februar 2022, 14:47
von Carlos123
Hallo derElch,
In meinem Fall suche ich Daten (Datum) der Format jjjj-mm--tt ...und keine feste Wörter wie HA..

Deswegen miss ich mit Regex arbeiten :)

Re: Find all matches greedy

Verfasst: Montag 21. Februar 2022, 15:03
von derElch
Hallo Carlos123,

dann bitte zeige, wenn möglich ein Beispiel für die Original-Daten. Sollte es nämlich einigermaßen strukturiert sein, könnte man auch mit dem time Modul arbeiten.

Re: Find all matches greedy

Verfasst: Montag 21. Februar 2022, 17:07
von sparrow
@Carlos123: Ist das hier ein schlecht gelungener Troll Versuch? Wieso fängt man denn bitte ein Thema an, in dem man das Auftreten von "HA" in einem Text sucht und kommt dann am Ende bei einem Datum heraus? Meinst du nicht, es ist sinnvoll von Anfang an das konkrete Problem zu benennen statt irgendwelche ausgedachten, gar nicht zielführenden Pseudo-Fragen?

Also: Was ist das konkrete Problem, das du lösen willst?

Re: Find all matches greedy

Verfasst: Dienstag 22. Februar 2022, 09:24
von Carlos123
sparrow hat geschrieben: Montag 21. Februar 2022, 17:07 @Carlos123: Ist das hier ein schlecht gelungener Troll Versuch? Wieso fängt man denn bitte ein Thema an, in dem man das Auftreten von "HA" in einem Text sucht und kommt dann am Ende bei einem Datum heraus? Meinst du nicht, es ist sinnvoll von Anfang an das konkrete Problem zu benennen statt irgendwelche ausgedachten, gar nicht zielführenden Pseudo-Fragen?

Also: Was ist das konkrete Problem, das du lösen willst?
Hast du deinen morgen früh pups noch nicht rausgelassen oder was ist dein Problem?

Es heisst doch, man soll das Problem soweit wie möglich vereinfachen und das habe ich getan und die Lösung für HA hat für das Datum auch funktioniert und das habe ich geschrieben....ich wollte auch nicht dass jemand mein ganzes problem löst sondern nur ein Hinweis...

So ich habe den Hinweis gekriegt wie das mit HA löse und den Rest habe ich gemacht

Also entspann dich ein bisschen

Re: Find all matches greedy

Verfasst: Dienstag 22. Februar 2022, 09:34
von Carlos123
In den deutschen Foren trifft echt oft so schlecht gelaunte Spießer die immer etwas suchen das sie kritisieren können...unglaublich

Danke an den anderen

Re: Find all matches greedy

Verfasst: Dienstag 22. Februar 2022, 09:56
von einfachTobi
Geht weniger um Spießigkeit als darum, dass man ein Datum in der Regel anders extrahiert, als mit RegEx-Gefrickel. RegEx kann alle Probleme lösen, ist aber meist nicht der eleganteste, performanteste und vor allem nicht der leichteste Weg. Meistens haben die Tippgeber hier im Forum den Anspruch eine optimale Lösung zu finden. Das Unverständnis über deine Vereinfachung rührt vermutlich daher, dass gleichzeitig das Problem in einen anderen Bereich möglicher Lösungsstrategien gerückt wird und damit der angedachte Weg nicht die optimale Lösung darstellt. Genereller Tipp für Vereinfachungen: Vereinfache nur den Code, nicht die Daten oder das Problem selbst. Also isoliere die Codestellen, die Einfluss auf das Problem haben, aber belasse das Problem so wie es ist. Damit macht man meist nichts verkehrt. Sofern Datensätze betrachtet werden müssen, hilft ein repräsentativer Auszug daraus, der das Problem darstellt (bspw. 5 von 1.000.000 Datenzeilen, wovon 3 korrekt verarbeitet werden und 2 nicht).

Re: Find all matches greedy

Verfasst: Dienstag 22. Februar 2022, 10:55
von __deets__
Carlos123 hat geschrieben: Dienstag 22. Februar 2022, 09:24 Es heisst doch, man soll das Problem soweit wie möglich vereinfachen
Schluesselwort hier ist "wie moeglich". Du bist damit zu weit gegangen, weil dein vermeintliches Problem nicht mehr genug mit dem wirklichen zu tun hat. Jemand, der sich also die Muehe macht, dein Problem zu analysieren und dir Hinweise oder gar eine Loesung praesentiert, ist damit in die falsche Richtung geschickt worden. Weiss ja nicht wie du das empfindest, aber da deine Antworten hier auch nicht gerade aus dem tiefen Zen kommen, kannst du dir vielleicht vorstellen, dass das auch mal wem anders auf den Nerv geht. Also entspann du dich auch mal.