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
1816to1820
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 4

RegEx und seine Geheimnisse - Teil 4
05.03.2021 20:14:05
Siegfried
Hallo, habe wieder einmal Probleme und bin daher auf Hilfe zur Lösungsfindung angewiesen.
Hoff es kann mir da jemand weiterhelfen.
Ich zerlegen einen String, in dem ich nach dem Trennzeichen = ; suche.
Der erste Teil enthält die Länderkenn, PLZ und Ortsnamen, sieht dann z.B so aus

  • GB-PL34 0DA Tintagel;
    GB-4050 Traun; Stainland Road 363;
    GB-PL27 7JQ Wadebridge;
    GB-BT38 8BE Carrickfergus;
    GB-Newton Stewart;
    GB-Seasalter;
    GB-Bideford;

  • da es ja in verschiedenen Ländern bei der PLZ eine Mischung von Buchstaben und Zahlen gibt wie 1, 3 und 4 Zeile, andere wie 5 - 7 Zeile wo die PLZ fehlt finde ich leider keine wirklich brauchbare Lösung das Problem echt zu lösen.
    Ich trenne zu beginn mal den String durch entfernen der ersten 3 Zeichen, den Rest mit InstRrev durch suchen des ersten Leerzeichen von Rückwärts, übrig bleibt also die reine PLZ.
    Diese werden nun mit Isnumeric(Wert) geprüft, in Zeile 2 also eindeutig, dann frage ich über Regex mit dem pattern "[A-z0-9]" ab, nun wünschte ich mir eine Rückantwort, ja in Wert handelt es sich um Zeichen und Zahlen daher aucch eine PLZ, besteht der Wert jedoch nur aus Zeichen, sollte der Ersatz (für den Ortsnamen) "xxxxx" sein.
    Wie würde dazu bitte die/eine Lösung aussehen.
    Dazu spielet leider noch mit das meine Regex-Abfrage mir immer einen Makrofehle auswirft und ich bis dato leider auch nicht die Ursache dazu gefunden habe.
  • Private Function RegEx(Text, pattern, Optional Occurence = 0) As String
    'mit Extras, Verweise.. auf Microsoft VBScript Regular Expressions 5.5 (besser zu debugen)
    Dim R As New RegExp
    Dim ergs As Object
    Set R = CreateObject("vbscript.regexp")
    R.IgnoreCase = True
    R.pattern = pattern
    Set ergs = R.Execute(Text)
    '    If ergs.Count > 0 Then MsgBox "Enthält > " & Text & " und ergs.Count = > " & ergs.Count
    If ergs.Count > 0 Then RegEx = Trim(ergs(0).submatches(Occurence))
    End Function
    


  • Mir ist bekannt, einige hier lieben es nicht, aber zu den Problemen auch Bilder, denn die sagen oft mehr als nur Text.
    Schon mal ein DANKE für Hilfeleistung
    Gruß Siegfried
    Userbild
    Userbild
    Userbild

    19
    Beiträge zum Forumthread
    Beiträge zu diesem Forumthread

    Betreff
    Datum
    Anwender
    Anzeige
    AW: RegEx und seine Geheimnisse - Teil 4
    05.03.2021 21:20:27
    onur
    Dann poste doch mal die (Beispiels-) Datei, dann zeige ich, wie es auch ohne RegEx geht.

    AW: RegEx und seine Geheimnisse - Teil 4
    05.03.2021 22:29:19
    Siegfried
    Hallo onur,
    habe mir dein Muster eben angesehen, soweit bin ich auch fast gekommen, nur stimmte es bei mir nicht mehr sobald die Ortsnamen aus mehreren Gruppen bestanden, wie "East Layton" od. "Mere Brow" od. "Plazhi San Pietro", dann hat InstRev zwar die erste Leerposition gefunden aber eben nicht die richtige unmittelbar nach der PLZ wenn vorhanden.
    Anbei ein Muster von mir.
    LG Siegfried
    https://www.herber.de/bbs/user/144500.xlsx

    Anzeige
    AW: RegEx und seine Geheimnisse - Teil 4
    05.03.2021 22:40:59
    onur
    Nix für Ungut, aber ich opfere meine Freizeit, um dir zu helfen, aber du testest meine Lösung nicht mal und behauptest einfach, sie würde nicht funktionieren ?
    Was hat denn meine Lösung mit deinen Lösungsvesuchen zu tun ?
    Guckst du NOCH MAL hier:
    https://www.herber.de/bbs/user/144501.xlsm

    AW: RegEx und seine Geheimnisse - Teil 4
    05.03.2021 22:51:08
    Siegfried
    Entschuldige bitte onur,
    habe in deinem Muster nur gesehen das alle Ortsnamen ohne einem Leerzeichen waren, darum dachte ich mir, soweit bin ich doch auch schon gewesen.
    Verzeihe bitte daher nochmals über diese Oberflächlichkeit von mir.
    Nun werde ich mich mal in deine Lösung versuchen reinzudenken, hoffe ich verstehe sie am Schluss auch und habe wieder was dazugelernt.
    DANKE Gruß Siegfried

    Anzeige
    AW: RegEx und seine Geheimnisse - Teil 4
    05.03.2021 22:54:27
    onur
    "habe in deinem Muster nur gesehen das alle Ortsnamen ohne einem Leerzeichen ware" - das liegt an deinem Text-Beispiel.
    Die Bilder konnte ich ja nicht nehmen, da sie nun mal halt nur Bilder sind und man sie nicht Copy/Paste benutzen kann. :)

    AW: RegEx und seine Geheimnisse - Teil 4
    06.03.2021 10:58:01
    Siegfried
    Hallo onur,
    nun mit 76 versteht man ja nicht alles sofort, daher mal folgende Frage.
    Was bedeutet in deiner Formel =@plz(C2) der Klammeraffe @, was löst er aus wozu dient er überhaupt, ist mir total neu, glaubte immer diese Zeichen wird nur bei Mailadressen verwendet.
    Dann habe ich noch eine PLZ Möglichkeit übersehen, welche in fast allen PLZ von Polen vorkommt, "PL-06-114", also innerhalb der PLZ noch ein Bindestrich.
    So wie jetzt deine Function PLZ ist stimmen alle PLZ in Polen nicht, siehe Muster.
    Fand leider keine Lösung dafür, mein Versuch die Länderkennung vorher schon zu entfernen bewirkte genau das Gegenteil, alle die vorher OK waren bekamen nun die xxxxx Zuordnung.
    Habe deine Function in einer Datei mit 23.000 Datensätzen auch getestet, dauert da schon ganz schön lange bis er durch ist, gelöst dadurch aber nur eine Position.
    Da im Aufbau der mir zur Verfügung stehenden Daten, Länderweise sehr große Unterschiede sind mus ich jeden Datensatz einmal auf möglich gleichen Nenner bringen.
    Zum Beispiel:
    Alle Kommas die sich vor den Wörtern "Gebühren" oder "STP" befinden auf ";" ändern, denn die Kommas in den Beschreibungstexten sollen ja erhalten bleiben.
    Die Bezeichnung "Tel." austauschen gegen "+" um die weitere Verarbeitung der Tel-Nr. zu erreichen und mit der Landesvorwahl zu versehen, usw..
    Daher meine Frage, wie und was müsste man in deiner Function ändern, um beim Durchlaufen der Datensätze und modifizieren der Daten wie beschrieben, auch die Herstellung der korrekten PLZ durchzuführen.
    Gruß Siegfried
    https://www.herber.de/bbs/user/144513.xlsm

    Anzeige
    AW: RegEx und seine Geheimnisse - Teil 4
    06.03.2021 11:58:45
    onur
    "gelöst dadurch aber nur eine Position."?
    "Was bedeutet in deiner Formel =@plz(C2) der Klammeraffe @" ? Bei mir ist da kein einziger Klammeraffe.
    https://www.herber.de/bbs/user/144515.xlsm

    AW: RegEx und seine Geheimnisse - Teil 4
    06.03.2021 12:14:06
    Siegfried
    Entschuldige onur, ich meinte natürlich, in meinem Beispiel die Spalte E in welcher eben der Aufruf der Funktion PLZ mit "=@plz(C2)" steht.
    das kapiere ich nicht, wozu ist das Zeichen @ da/gut?
    Gruß Siegfried

    AW: RegEx und seine Geheimnisse - Teil 4
    06.03.2021 11:54:04
    Siegfried
    Nun unabhängig von der bereits angebotenen Lösung durch onur, bleibt für mich immer noch die Frage offen, wie könnte eine Lösung über Regex aussehen.
    Finde Regex nicht so schlecht, nur kann man wie im Eröffnungsbeitrag von mir erwähnt, mit Regex feststellen ob der abgefragte Wert nur Zahlen, oder gemischt, Zahlen, Buchstaben und auch Leerzeichen od. Bindestriche, wäre dann auch noch eine PLZ, oder eben nur Buchstaben, wäre somit eindeutig ein Ortsname und keine PLZ daher Ersatz dafür xxxxx, enthält.
    Würde mich freuen von den Regex-Spezialisten da eine Rückantwort bzw. ein Musterbeispiel zu bekommen.
    Gruß Siegfried

    Anzeige
    AW: RegEx und seine Geheimnisse - Teil 4
    06.03.2021 12:07:59
    onur
    Ich biete dir eine Lösung und du suchst nebenbei weiter nach einer DreckEx-Lösung, als ob meine nicht gut genug wäre ?
    DANN SUCH MAL WEITER, ICH bin raus.

    AW: RegEx und seine Geheimnisse - Teil 4
    06.03.2021 12:17:15
    Siegfried
    Aber onur, das hat doch mit deiner super Lösung nichts zu tun, ich will doch was dazu lernen daher meine Frage wie könnte mit Regex eventuell eine solche Abfrage gelöst werden.
    Gruß Siegfried

    AW: RegEx und seine Geheimnisse - Teil 4
    06.03.2021 12:25:22
    onur
    Wenn du lernen willst, dann lerne zu programmieren statt zu lernen, mit sowas wie RegEx zu arbeiten.
    RegEx ist doch eine eierlegende Wollmilchsau, die sich Jemand für Leute mit wenig VBA-Kenntnissen ausgedacht hat, um möglichst viele Sachen, die keine Sau braucht, in eine Funktion zu packen, für dessen Benutzung man schon fast ein Handbuch braucht. Die Benutzung/Steuerung mit all den Schaltern erinnert an alte DOS-Zeiten, als man noch jede Menge Parameter-Hieroglyphen hinter die Befehle packen musste.

    Anzeige
    AW: RegEx und seine Geheimnisse - Teil 4
    06.03.2021 13:26:54
    Siegfried
    Nun, wenn ich gewusst hätte das du auf Regex allergisch bist, hätte ich natürlich diese nachfrage nicht gestellt.
    Aber leider hast du mir meine Frage wegen des @ Zeichen in der Abfrage Spalte 5, =@plz(C2) auch noch nicht erläutert, also habe ich dafür leider nichts dazugelernt.
    Gruß Siegfried

    AW: RegEx und seine Geheimnisse - Teil 4
    06.03.2021 14:14:30
    onur
    Es geht nicht um RegEx, es geht darum, dass man nicht parallel noch woanders weitersucht, während Jemand bereits an der Lösung deines Problems arbeitet. DAS IST UNHÖFLICH.
    Hast du dir überhaupt die Lösung deines "PL-Problems" angeschaut? Offenbar wieder mal NICHT.
    "Aber leider hast du mir meine Frage wegen des @ Zeichen ...." ? - Ich sagte bereits, bei mir habe ich sowas nicht, also kann ich nicht sagen, woher das bei DIR kommt.
    Muss wohl dein Excel selbständig machen.
    Guckst du:
    https://qastack.com.de/superuser/501691/what-does-the-bar-foo-operator-do-in-excel-in-particular-the-at-sign

    Anzeige
    AW: RegEx und seine Geheimnisse - Teil 4
    06.03.2021 23:59:09
    Siegfried
    Ja was soll ich sagen onur, du sagst bei dir wäre kein @, stellst da noch sogar eine entsprechende These dazu auf (meine Frage wegen des @ Zeichen ...." ? - Ich sagte bereits, bei mir habe ich sowas nicht, also kann ich nicht sagen, woher das bei DIR kommt. Muss wohl dein Excel selbständig machen.),
    obwohl in den von dir nach der Korrektur von PL- in den von dir als Download zur Verfügung gestellt Dateien "144501.xlsm und 144515.xlsm" in den jeweiligen Auswertespalten "=@PLZ(C2)" dieses steht, siehe dazu Bild "Klammeraffe_001.jpg".
    nun, habe inzwischen festgestellt wenn ich über ein Makro der Zelle den Wert TEXT zuordne, dies genau mit dem @ erfolgt und dadurch erreiche, das alles mal linksbündig ist und Zahlen eben TEXT sind.
    Da ich mit deiner "Function PLZ" natürlich bei einigen Zeilen hängen geblieben bin, weil sie nicht 100% der Abfrage entsprachen musste ich da etwas nachbessern, siehe Bild "Klammeraffe_002.jpg".
    Um jenes Endprodukt zu erreichen was ich möchte bzw. benötige, muss eben im Vorfeld so einiges bereinigt werden und daher ein Durchlauf mit jedem einzelnen Datensatz erforderlich ist.
    habe daher deine Function PLZ eine Spur abgeändert, dass also jede Zeile extra ausgewertet wird, siehe
  • 
    Public Function PLZ(txt As String, ZL, wSpa) As String
    Dim arr, found, mx, i, ii
    PLZ = "xxxxxx"
    If Left(txt, 3) = "PL-" Then
    txt = Replace(txt, "-", " ", Start:=1, Count:=2)
    txt = Replace(txt, " ", "-", Start:=1, Count:=1)
    End If
    arr = Split(txt, "-")
    arr = Split(arr(1), ";")
    arr = Split(arr(0), " ")
    mx = 1
    If mx > UBound(arr) Then mx = 0
    For i = 0 To mx
    found = False
    For ii = 0 To 9
    If InStr(arr(i), CStr(ii)) Then
    found = True
    Exit For
    End If
    Next ii
    If found Then
    If PLZ = "xxxxxx" Then PLZ = ""
    If PLZ  "" Then PLZ = PLZ + " "
    PLZ = PLZ + arr(i)
    End If
    Next i
    If Left(txt, 3) = "PL-" Then PLZ = Replace(PLZ, " ", "-", Start:=1, Count:=1)
    Cells(ZL, wSpa).NumberFormat = "@"
    Cells(ZL, wSpa).Value = PLZ
    End Function
    


  • Gehe ich richtig in der Annahme, dass wenn bei anderen Ländern in der PLZ auch ein "-" auftauchen sollten, ich die Abfrage dann mit (Or Left(txt, 3) = "XX-") erweitert müsste.
    Gruß Siegfried
    Userbild
    Userbild

    Anzeige
    AW: RegEx und seine Geheimnisse - Teil 4
    07.03.2021 08:41:35
    ChrisL
    Hi
    Das @ sieht mir spontan nach einer Lotus123-Formel aus. Mal bei den erweiterten Einstellung nachschauen, ob evtl. die Lotus-Komptabilität aktiviert wurde.
    Der Pattern könnte wie folgt lauten:
    [A-Z]{2}-((\d+)|((([A-Za-z]+[0-9]|[0-9]+[A-Za-z])[A-Za-z0-9]*)( (([A-Za-z]+[0-9]|[0-9]+[A-Za-z])[A-Za-z0-9]*))?))
    Das Länderkennzeichen und Bindestrich wird als Erkennungsmerkmal einbezogen und muss später entfernt werden. Das Ersetzen von "nichts" durch "xxxx" ist ebenfalls ausserhalb von RegEx zu erledigen.
    Länderkennzeichen
    [A-Z]{2}-
    Reine Zahl
    (\d+)
    ODER
    |
    Buchstaben gefolgt auf Ziffer ODER Ziffer gefolgt auf Buchstaben
    (([A-Za-z]+[0-9]|[0-9]+[A-Za-z])[A-Za-z0-9]*)
    optional (=?): Leerschlag UND (Buchstabe gefolgt auf Ziffer ODER Ziffer gefolgt auf Buchstabe)
    ( (([A-Za-z]+[0-9]|[0-9]+[A-Za-z])[A-Za-z0-9]*))?
    cu
    Chris

    Anzeige
    AW: RegEx und seine Geheimnisse - Teil 4
    09.03.2021 23:58:55
    Siegfried
    Hallo Chris,
    ich sage einmal DANKE für deine Rückmeldung, hatte bis jetzt leider keine Zeit zum Testen, werde es in den nächsten Tagen aber versuchen.
    Gruß Siegfried

    AW: RegEx und seine Geheimnisse - Teil 4
    10.03.2021 08:04:21
    ChrisL
    Danke für die Rückmeldung
    cu
    Chris

    Beliebteste Forumthreads (12 Monate)

    Anzeige

    Beliebteste Forumthreads (12 Monate)

    Anzeige
    Anzeige
    Anzeige