Live-Forum - Die aktuellen Beiträge
Datum
Titel
29.03.2024 13:14:12
28.03.2024 21:12:36
28.03.2024 18:31:49
Anzeige
Archiv - Navigation
1808to1812
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

RegEx und seine Geheimnisse - Teil 3

RegEx und seine Geheimnisse - Teil 3
04.02.2021 15:05:25
Siegfried
Da ja beim Teil 2 leider die Frist abgelaufen war/ist hier nochmals der letzte Beitrag
Hi Yal
Nun dein Hinweis auf "regex101.com" ist ein teilweiser Lichtblick was RegEx betrifft für mich.
Obwohl mit 76 Jahren Englisch ja gerade nicht meine Stärke ist, habe es zwar auf German eingestellt aber alles wird ja nicht übersetzt daher doch noch sehr viele unbekannte für mich.
Wie du aus angehängtem Bild ersehen kannst, habe ich einmal versucht das mit den Ortsnamen zu lösen, finde aber nicht mit welcher Abfrageeinstellung er - Bindestriche und / Querstriche akzeptiert, bleibt mir bis jetzt ein Rätsel. Bei [Bourg-St-Pierre] hat er sie angenommen beim Vorletzten Ort aber nicht?
Mit der Einstellung Python 2.7 brachte er das beste Ergebnis, ist das eigentlich im VBA verwendbar?
VG Siegfried
Userbild

8
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: RegEx und seine Geheimnisse - Teil 3
04.02.2021 16:39:19
ChrisL
Hi
Ich bin zwar nicht Yal, aber ist ja kein Privat-Chat hier :)
Mit ".+" ist es egal, was vor einem gültigen Pattern davor steht. Der letzte gültige Pattern ist [Kärkküla] und somit ist alles was vorher kommt auch gültig, alles was nachher kommt ist nicht mehr gültig. Anders ausgedrückt, [Bourg-St-Pierre] ist genauso ungültig wie [Saint-Valery-sur-Somme], es ist nur eine frage der Reihenfolge. Entferne ".+" und du siehst welche Teile tatsächlich gültig sind.
Falls du ausschliesslich / und - zulassen möchtest, dann so:
(\[[\w\]+\/+\-+\s]+\d*\])
Ansonsten müsstest du mal präzisieren, was du eigentlich genau einfangen möchtest. Sollte es alles zwischen eckigen Klammern sein, dann z.B. so:
\[(.*?)\]
Welche RegEx Variante genau der VBA Variante entspricht, kann ich spontan auch nicht beantworten. Für die üblichen Pattern dürfte es aber keinen grossen Unterschied machen.
cu
Chris
Anzeige
AW: RegEx und seine Geheimnisse - Teil 3
04.02.2021 17:18:17
Siegfried
Hallo Chris,
ja, ist mir schon klar das dies kein Privat-Chat ist, aber in dieser Angelegenheit war es bis jetzt immer nur Yal der mir geantwortet hat und weitergeholfen hat.
Nun deine gemachten Anregungen finde ich jedenfalls Spitze und das man für alles was man zulassen möchte
\/+\-+\ usw. also das + dazugeben muss habe ich leider bis jetzt nirgendwo dalesen.
Genau genommen sollte er bei der Ortsauswertung welche ja mit [nnnnn] gekennzeichnet ist alles nehmen, die Klammer werden ja mit Replace dann entfernt.
Werde also deine Anregung mit \[(.*?)\] umgehend testen.
Im String stehen also ----info@online.com; Gästewertung 4 (23); 10.0 EUR; Ottostraße 7; [Ort] für mich ist nun die Frage wie erwische ich die Straße vor dem Ort.
Wenn keine angegeben ist kann davor auch einer der anderen Werte stehen, müsste also für die Straßenabfrage alles was nicht damit zu tun hat ausschließen.
Wie müsste ich das dann aufbauen?
Jedenfalls einmal DANKE
VG Siegfried
Anzeige
AW: RegEx und seine Geheimnisse - Teil 3
04.02.2021 18:16:42
ChrisL
Hi Siegfried
Kein Ding. Mein Kommentar war auch mit Augenzwinkern gedacht.
N.b. auf Replace kannst du mit dem Pattern verzichten.
Man bräuchte eine grössere Datenmenge, um die Muster zu erkennen.
Wenn die Trennung ";" immer an gleicher Stelle ist, also quasi ein CSV-File, dann würde ich auf RegEx verzichten und Split("String",";")(1) nehmen. Ansonsten müsste man sich etwas einfallen lassen z.B. alles zwischen "@" und "EUR". Was übrig bleibt ab ";" ausschneiden.
Aber eben, man brauchte eine grössere Menge für die Analyse und ich frage mich auch, ob im Beispiel beide Strassen benötigt würden und ob (23) dazu gehört.
cu
Chris
Anzeige
AW: RegEx und seine Geheimnisse - Teil 3
05.02.2021 08:40:14
Siegfried
Hallo Chris,
das ist ja das Problem, die Anzahl der ; ist je nach vorhandener Datenlage unterschiedlich.
Daher wird der String (von Yal übernommen) am Anfang mit der Splitt-Funktion in ein Array eingelesen,
dieses dann durchlaufen und ein Satz nach dem anderen abgefragt. Ist das gesuchte Muster nicht vorhanden der Zähler bis zum UBOUND(Arr) erhöht. Wenn gefunden dann in die entsprechende Spalte weggeschrieben.
Läuft nach meinen letzten Anpassungen bestens bis auf die Zuordnen der Werte für die Straße.
Frage: Ist es mit RegEx auch möglich ob z.B. die Werte EUR, @, [ oder LEER nicht enthalten sind, dann wäre es die Straße. oder muss ich das extra vorher über Instring abfragen.
Gruß Siegfried
Anzeige
AW: RegEx und seine Geheimnisse - Teil 3
05.02.2021 10:50:29
ChrisL
Hi Siegfried
Bei aller Liebe zu RegEx, aber aufgrund der Beschreibung würde ich einfach noch einmal einen Split machen und auf RegEx verzichten:
Sub t()
Dim ar As Variant, i As Integer
Const str As String = "info@online.com; Gästewertung 4 (23); 10.0 EUR; Ottostraße 7; [Ort]"
ar = Split(str, "; ")
For i = 0 To UBound(ar)
If InStr(ar(i), "@") Then
MsgBox "Email: " & ar(i)
ElseIf InStr(ar(i), "EUR") Then
MsgBox "Betrag: " & ar(i)
ElseIf InStr(ar(i), "[") Then
MsgBox "Ort: " & ar(i)
Else
MsgBox "Strasse: " & ar(i)
End If
Next i
End Sub
Oder sowas:
(;|^)([^\]\@\.]+)(;|$)
Aber eben, konkrete Muster kann man beim besten Willen nicht mit nur einer Beispielzeile erkennen.
cu
Chris
Anzeige
AW: RegEx und seine Geheimnisse - Teil 3
08.02.2021 20:29:00
Siegfried
Hallo Chris,
DANKE einmal für deinen Vorschlag mit der MsgBox Abfrage.
Habe nun einmal beide Wege erstellt, da mich einerseits interessiert wie lange dauert der Durchgang von 23.000 Datensätzen bei jeder Art bzw. will mich doch nicht umsonst auch mit RegEx beschäftigt haben.
In einem ersten Durchgang versuche ich mal alle Ungereimtheiten zu beheben, ist alleine schon eine Aufwendige Sache, aber langsam wird es.
Gruß Siegfried
AW: RegEx und seine Geheimnisse - Teil 3
09.02.2021 08:31:54
ChrisL
Hi Siegfried
Danke für die Rückmeldung.
Falls du zu einer eindeutigen Erkenntnis betr. Durchlaufzeit kommst (RegEx vs. konventionelle Mittel), würde es mich interessieren. Aus dem Bauch heraus würde ich vermuten in etwa ähnlich, da Split/InStr relativ schnell sind. Bei komplexeren Pattern würde ich raten, dass RegEx das Rennen machen würde.
cu
Chris
Anzeige
AW: RegEx und seine Geheimnisse - Teil 3
09.02.2021 11:04:04
Yal
Hallo Siegfried,
Hut ab, dass Du dich in einem Alter, wo man sich eher mit Philosophie beschäftigt, mit der binären Welt auseinandersetzt.
Ja, RegEx ist ein starkes Werkzeug, aber leider ein Ein-Zweck-Werkzeug. Es ist leider nicht so, dass das RegEx-Wissen weitreichende IT-Erkenntnis mit sich bringt. Zumindest hat man sich damit über Abhängigkeit/Unabhängigkeit viel Gedanken gemacht, und das würde ich mir bei vielen selbsternannten "Programmierern" wünschen.
Die erste Schritt zur Lösung deines "Problems" (eher Spielwiese, oder?), die Teil-String zu den richtigen Felder zu zuordnen, hast Du schon vieles erreicht. Jetzt geht es an die Ausnahmebehandlung.
Automatisierung bedeutet "erkenne die Regeln, die dahinterliegen". Wenn Du diese festen Punkten gefunden hast, kannst Du alles machen.
Ich würde so vorgehen: für ein bestimmtes Feld verschiedene RegEx gleichzeitig verwenden und die damit bewertete Eingangstring in verschiedenen Gruppen zuordnen. Dann kannst Du schneller erkennen, was die Elemente, die eine bestimmte Voraussetzung nicht erfüllen, gemeinsam haben.
Viel Erfolg und Viel Spass!
Halt uns informiert
VG Yal
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige