Seite 1 von 1

str.extract

Verfasst: Donnerstag 21. Januar 2021, 22:12
von st_baum
Es soll der String vor und nach bestimmten zeichen ausgewählt werden. Exemplarisch steht in einer Spalte:

wert: 2, beobachtung: 1,

Alles nach der Zeichenkette "wert:" und vor dem ersten "," soll ausgewählt werden, d.h. "2". Ist mir nicht ganz klar, wie ich das mit str. extract anstelle.

Re: str.extract

Verfasst: Donnerstag 21. Januar 2021, 22:26
von Sirius3
Vor allem, weil es gar kein str.extract gibt. Aber Du könntest ja in der Dokumentation nachlesen, welche Methoden Strings wirklich haben, und ob es eine passendere gibt.

Re: str.extract

Verfasst: Donnerstag 21. Januar 2021, 23:51
von __blackjack__
Oder dazu schreiben das es gar nicht um `str.extract()` geht, sondern um `pandas.Series.str.extract()`.

Das will einen regulären Ausdruck. Was wurde versucht und wie weicht das Ergebnis von den Erwartungen ab? Die API-Dokumentation zur Methode gelesen? Die Dokumentation dazu im „User Guide“? Beides hat auch Beispiele.

Re: str.extract

Verfasst: Freitag 22. Januar 2021, 09:12
von st_baum
Zunächst bitte ich um Entschuldigung für meine schlampige Beschreibung. Richtig, es handelt sich um 'str.extract()' aus Pandas.

Ich glaube es ist erstmal sinnvoll, die richtige regex zu finden und das ganze dann auf den DF zu übertragen:

Code: Alles auswählen

import re
m = re.search(r'(?<=user:")\w+-+\w', 'user:"abc-1d2-12",obs:"1"')
n = re.search(r'(?<=obs:")\w+', 'user:"abc-1d2-12",obs:"1"')
print(m.group(0),n.group(0))
Jetzt müsste ich die regex für m relativ umständlich erweitern, um alles bis zum ' " ' zu erfassen. Geht das einfacher, d.h. etwa sinngemäß wie 'alles bis'

Re: str.extract

Verfasst: Freitag 22. Januar 2021, 09:54
von __blackjack__
Da sind ja gar keine Gruppen definiert. Wenn Du alles zwischen den " haben willst, dann schreib dafür jeweils eine Gruppe nach dem öffnenden " die alles bis auf das schliessende " matcht:

Code: Alles auswählen

In [108]: m = re.search('user:"([^"]*)",obs:"([^"]*)"', 'user:"abc-1d2-12",obs:"1"')

In [109]: m.groups()
Out[109]: ('abc-1d2-12', '1')

Re: str.extract

Verfasst: Freitag 22. Januar 2021, 14:05
von st_baum
Danke :-)