Seite 1 von 1
[gelöst] Teil eines Textes Extrahieren (RegEx inkl.)
Verfasst: Mi 15. Mär 2017, 22:48
von Lirobadom
Hallo,
Also ich versuche aus einer Liste die in einer Spalte das nachfolgende Format hat Daten zu extrahieren:
Text/A_00_1-1_Textundmherinkl(_-)
(k.A. welche Sonderzeichen alle vorkommen können, aber die sind bis jetzt aufgefallen. Und leider gibts auch ein paar andere Sonderfälle, die sollte ich aber schaffen mit (|) oder Regeln abzugreifen)
Das Ziel ist "A_00_1-1" zu erhalten. Die derzeitige Formel:
Code: Alles auswählen
=TEIL(A4;(FINDEN("/";A4))+1;FINDEN("\d_[a-zA-Z]";A4)-FINDEN("/";A4))
dabei passt der "\d_[a-zA-Z]" Teil offenbar nicht, folgendes funkt.
Nun, suche ich manuell nach "\d_[a-zA-Z]" (ohne ", reguläre Ausdrücke Aktiv, auch in Calc Optionen btw. und an anderem Beispiel mit SUCHEN-Formel getestet) dann findet er auch die er sollte. Kann es sein, dass FINDEN keine Regulären Ausdrücke mag? Wenn, welche andere Lösung gibt's dafür? Oder hab ich einfach was übersehen?
Re: Teil eines Textes Extrahieren (RegEx inkl.)
Verfasst: Mi 15. Mär 2017, 23:24
von karolus
Hallo
FINDEN kann nicht mit regulären Ausdrücken, das steht aber auch schon in der Hilfe.
Falls die Regel gilt "alles zwischen / und dem letzten _ "
Code: Alles auswählen
=TEIL(A4; FINDEN("/"; A4) ; SUCHEN("_[^_]*$"; A4) - FINDEN("/"; A4) )
Re: Teil eines Textes Extrahieren (RegEx inkl.)
Verfasst: Mi 15. Mär 2017, 23:53
von Lirobadom
Ah, weil Finden kein RegEx unterstützt dabei stehen hat!?
Ich hatte eig. schon mal Suchen getestet und dabei nen Fehler (Wert!) bekommen? (Vl. bei nem noch inkompatiblen Feld)
Jedenfalls scheine ich Suchen falsch verstanden zu haben, und das ist es, was ich brauch.
K.A. worin dann der Unterschied zw. den beiden liegt (außer RegEx Support)?
Code: Alles auswählen
=TEIL(A2;(FINDEN("/";A2))+1;SUCHEN(("(\d|-)_[a-zA-Z]");A2)-FINDEN("/";A2))
Liefert mir nun zu meist das was ich brauch, bis auf noch einzelne Ausnahmen wo ich noch weiter schauen muss wie ich die RegEx Regeln am besten anwende. Jedenfalls soweit gelöst, danke für das Beispiel, dass mich das erkennen hat lassen. (btw. Nein, "_" und andere Zeichen können am Ende also in "Textundmehr" auch vorkommen, nur am Anfang nicht, deswegen die Kombination weil die .... relativ sicher ist, muss aber noch schauen ob ichs weiter "nach vorne" ausbaue) EDIT: Und wie ich rum-schustern musste (schade dass ich [^\W\d] nicht nutzen konnte - keine Umlaute und hat glaube ich Sonderzeichen beinhaltet?):
Code: Alles auswählen
=TEIL(A2; (FINDEN("/";A2))+1; SUCHEN("(-\d|--|_4|__|\d\d)(_|-|)([a-zA-Z\u00C0-\u017F]+|(\(\d+\)|\d[a-zA-Z\u00C0-\u017F]+))";A2) +1 -FINDEN("/";A2))
Re: Teil eines Textes Extrahieren (RegEx inkl.)
Verfasst: Do 16. Mär 2017, 12:16
von mikele
Hallo,
Das Ziel ist "A_00_1-1" zu erhalten
Und wie ich rum-schustern musste
Warum bleibst du dann nicht einfach bei
sprich: Was funktioniert daran nicht?
Re: Teil eines Textes Extrahieren (RegEx inkl.)
Verfasst: Do 16. Mär 2017, 12:43
von karolus
Hallo
mglw. weil 12 nur zum gezeigten Inhalt passt aber nicht generell
Re: Teil eines Textes Extrahieren (RegEx inkl.)
Verfasst: Fr 17. Mär 2017, 01:31
von Lirobadom
Jep, so ist es leider, wie geschrieben, gibt ein paar "Sonderfälle", die Spezialbehandlung bedurften. Z.B. "irgendeintext/1997_4_irgendeintextundevSonderzeichen". Aber das war per se nicht das Problem, sondern nur dass die "Grundformel" funktioniert. Ich hab das nur hinzugefügt, damit Leute die nach ähnlichem Suchen auch ein Beispiel für die ... vollständige Anwendung haben. Ich mein es ist nicht 100% perfekt für meine Daten aber das beste was ich erreichen konnte bei dem "Mischmasch" aus Daten (also ~4% Sonderbehandlung und aus dieser Teilmenge zeigt es geschätzt 2% nicht .. einwandfrei an) ohne diese aufwändig zu ändern und für meine Zwecke ausreichend.
auch RegEx kann es nicht eindeutig, denn ...
Verfasst: So 25. Mär 2018, 14:26
von Lupo
Es ist immer misslich, wenn ein Zeichen (hier der Unterstrich) gleichzeitig Trenner von Wörtern als auch Bestandteil eines Wortes ist.
Hier eine Lösung für den Fall, dass der
zweitletzte Unterstrich die gesuchte Folge vor dem Ende abtrennt:
B1: {
=TEIL(A1;SUCHEN("/";A1)+1;LÄNGE(A1)-SUCHEN("^";WECHSELN(VERBINDEN(;;TEIL(A1;200-ZEILE($1:$199);1));"_";"^";2))-SUCHEN("/";A1))}
mit
Nr. 5