Reguläre Ausdrücke mit Python

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
Wolf2010
User
Beiträge: 3
Registriert: Montag 11. Oktober 2010, 20:45

Hallo zusammen!

Ich habe folgendes als Auszug zu einem Textfile:

KraftX= -1.56789E+00 KraftY=.....

Jetzt würde ich gerne mit Hilfe von regulären Ausdrücken meine Textdatei nach "KraftX=" absuchen und die dahinter stehenden Werte einlesen und zunächst in einem String-Array abspeichern. Da ich nicht aus dem Bereich der Programmierung komme :K , ist es mir zurzeit schleierhaft wie ich vorgehen kann, so dass es mit möglichst wenig Aufwand funktioniert. Ach ja...ich sehe gerade, dass die Leerzeichen vor dem negativen Vorzeichen nicht angezeigt werden...es befinden sich also noch 2 Leerzeichen vor dem "Minus" bei KraftX...

Hat jemand von euch einen Lösungsvorschlag?
Benutzeravatar
Hyperion
Moderator
Beiträge: 7478
Registriert: Freitag 4. August 2006, 14:56
Wohnort: Hamburg
Kontaktdaten:

Ich würde das hier vorschlagen:

Code: Alles auswählen

In [29]: import re

In [30]: expr = "KraftX= -1.56789E+00 KraftY=....."

In [31]: re.search(r"(?<=KraftX=) *(-?\d\.\d*E\+\d*)", expr).group()
Out[31]: ' -1.56789E+00'
encoding_kapiert = all(verstehen(lesen(info)) for info in (Leonidas Folien, Blog, Folien & Text inkl. Python3, utf-8 everywhere))
assert encoding_kapiert
Benutzeravatar
Hyperion
Moderator
Beiträge: 7478
Registriert: Freitag 4. August 2006, 14:56
Wohnort: Hamburg
Kontaktdaten:

Update (um das / die Spaces vor dem String sofort wegzubekommen):

Code: Alles auswählen

In [34]: re.search(r"(?<=KraftX=) *(?P<value>-?\d\.\d*E\+\d*)", expr).group("value")
Out[34]: '-1.56789E+00'
encoding_kapiert = all(verstehen(lesen(info)) for info in (Leonidas Folien, Blog, Folien & Text inkl. Python3, utf-8 everywhere))
assert encoding_kapiert
Wolf2010
User
Beiträge: 3
Registriert: Montag 11. Oktober 2010, 20:45

Hi USER!

Vielen Dank für deine Rückmeldung. Ich hab mich allerdings nicht ganz so gut ausgedrückt: der dargestellte Text war nur ein kleiner Auszug um zu zeigen worum es geht und was ich will. Es liegt eine Textdatei vor in der sich ca. 1000 Mal die Bezeichnung "KraftX=" befindet....und ich möchte die gesamte Datei absuchen und jeweils die Kraftwerte hinter "KraftX=" einlesen...und anschließend in einen String-Array zusammenfassen, der dann schließlich in ein Numpy-Array umgewandelt werden soll.

Hast du hierfür noch einen Vorschlag...also die Vorgehensweise für eine komplette Textdatei?

Gruß

Wolf2010 :)
BlackJack

@Wolf2010: Lies doch mal die Dokumentation zum `re`-Modul. Es gibt nicht nur `search()`.
Benutzeravatar
Hyperion
Moderator
Beiträge: 7478
Registriert: Freitag 4. August 2006, 14:56
Wohnort: Hamburg
Kontaktdaten:

Wie wäre es mit ein wenig Eigeninitiative! Guck doch mal in die Doku zum re-Modul... da findest Du einige interessante Funktionen, die alleine vom Namen her ziemlich deutlich für Dich interessant sein sollten.

Ich würde da ja eine iterative Funktion nutzen und das Umwandeln direkt vornehmen, ohne erst alle Ausdrücke in einer Liste zu sammeln.
encoding_kapiert = all(verstehen(lesen(info)) for info in (Leonidas Folien, Blog, Folien & Text inkl. Python3, utf-8 everywhere))
assert encoding_kapiert
Wolf2010
User
Beiträge: 3
Registriert: Montag 11. Oktober 2010, 20:45

:evil:
Ganz ehrlich Leute...inwiefern ich mich mit der umfangreichen Dokumentation beschäftigen kann ist mir klar. Ich hatte gehofft hier jemanden fragen zu können, der sofort die passende Information für mich hat...sonst brauche ich ehrlich gesagt keine Hilfe in einem Forum suchen. Da ich sehr viel anderes zutun habe, wollte ich mir den Weg über die Dokumentation sparen...weil ich kurz das Werkzeug brauche das Problem zu lösen...aber gut...für den ersten Tipp habe ich mich bedankt...das Bestreben mancher Leute ihr Wissen zu teilen scheint nicht ganz so ausgeprägt zu sein... :!:
sma
User
Beiträge: 3018
Registriert: Montag 19. November 2007, 19:57
Wohnort: Kiel

Du kennst den Spruch mit dem Fisch und dem Fischen lernen? Hier sind alle einfach sehr bemüht, dir das Fischen beizubringen.

Aber wenn dir dies hier reicht, auch gut:

Code: Alles auswählen

import re

s = "KraftX= -1.56789E+00 KraftY=....."; s += s; s += s
print(re.findall(r"KraftX=\s*([-+]?\d+\.\d+E[-+]\d+)", s))
Stefan
BlackJack

@Wolf2010: Ganz ehrlich: Das `re`-Modul enthält gerade mal 11 Funktionen. Da kurz drüber zu schauen was die grob machen ist IMHO nicht zuviel verlangt. Zumal wir den Namen der Funktion ja schon kannten und ziemlich klar sein sollte das `findall()` ein ziemlich naheliegernder Name ist, wenn man etwas sucht was alle Vorkommen findet.

Wenn Du hier Informationen haben möchtest, die Du auch *einfach* selbst hättest finden können, dann brauchst Du keine Hilfe, sondern jemanden der Dir die Doku vorliest.
Benutzeravatar
framp
User
Beiträge: 52
Registriert: Samstag 9. Oktober 2010, 22:16
Wohnort: bei Stuttgart
Kontaktdaten:

Wolf2010 hat geschrieben:Ganz ehrlich Leute...inwiefern ich mich mit der umfangreichen Dokumentation beschäftigen kann ist mir klar. Ich hatte gehofft hier jemanden fragen zu können, der sofort die passende Information für mich hat...sonst brauche ich ehrlich gesagt keine Hilfe in einem Forum suchen.
Bin auch noch neu hier im Forum. Bei meinem ersten Posting habe ich auch keine direkte Lösung erhalten sondern Hinweise wo ich nachlesen kann. So bin ich es auch aus anderen Foren gewohnt und praktiziere es dort auch so. Du musst bedenken, dass Du diese Hinweise kostenlos bekommst. Es gibt sicherlich auch eine Beratungsfirma oder Hotline zu Python: Die wird aber Euronen von Dir sehen wollen 8)
...das Bestreben mancher Leute ihr Wissen zu teilen scheint nicht ganz so ausgeprägt zu sein... :!:
Wieso? Sie haben Dir doch die entsprehenden Pointer gegeben. Das ist immer das schwierigste zu Anfang den Einstieg zu finden. Danach kommt man i.d.R. selbst weiter durch Lesen. Und wenn es dann wieder stockt kann man seine Fragen präzisieren und sich so iterativ der Lösung nähern :D
derdon
User
Beiträge: 1316
Registriert: Freitag 24. Oktober 2008, 14:32

Ich habe mich gerade gefragt, ob man sich einer Lösung auch rekursiv nähern kann und habe beim Nachdenken darüber Kopfschmerzen bekommen.
DasIch
User
Beiträge: 2718
Registriert: Montag 19. Mai 2008, 04:21
Wohnort: Berlin

@derdon Das war wohl ein RuntimeError ;)
Panke
User
Beiträge: 185
Registriert: Sonntag 18. März 2007, 19:26

derdon hat geschrieben:Ich habe mich gerade gefragt, ob man sich einer Lösung auch rekursiv nähern kann und habe beim Nachdenken darüber Kopfschmerzen bekommen.
So?
Antworten