Find all matches greedy

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
Carlos123
User
Beiträge: 9
Registriert: Montag 10. Januar 2022, 21:36

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
Sirius3
User
Beiträge: 18279
Registriert: Sonntag 21. Oktober 2012, 17:20

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']
Carlos123
User
Beiträge: 9
Registriert: Montag 10. Januar 2022, 21:36

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
Sirius3
User
Beiträge: 18279
Registriert: Sonntag 21. Oktober 2012, 17:20

Dafür gibt es doch die Dokumentation: https://docs.python.org/3/library/re.html
derElch
User
Beiträge: 36
Registriert: Sonntag 25. Februar 2018, 13:14

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.
Carlos123
User
Beiträge: 9
Registriert: Montag 10. Januar 2022, 21:36

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 :)
derElch
User
Beiträge: 36
Registriert: Sonntag 25. Februar 2018, 13:14

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.
Benutzeravatar
sparrow
User
Beiträge: 4540
Registriert: Freitag 17. April 2009, 10:28

@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?
Carlos123
User
Beiträge: 9
Registriert: Montag 10. Januar 2022, 21:36

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
Carlos123
User
Beiträge: 9
Registriert: Montag 10. Januar 2022, 21:36

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
einfachTobi
User
Beiträge: 512
Registriert: Mittwoch 13. November 2019, 08:38

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).
__deets__
User
Beiträge: 14545
Registriert: Mittwoch 14. Oktober 2015, 14:29

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.
Antworten