Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1752to1756
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

RegEx und seine Geheimnisse
24.04.2020 20:18:50
Siegfried
Hallo alle RegEx – Experten!
Bin mit RegEx blutiger Anfänger und kann leider im WEB zur Lösung meines Problems keinen Hinweis finden, selbst ist regEx Großteiles noch ein Spanisches Dorf für mich.
Userbild
Die vorhandene Funktion „getstring(text, Optional Titel)“ stammt von Steffen, welcher leider nicht mehr zur Hilfestellung sich meldet.
  • 
    Function getstring(text, Optional Titel)
    Dim strpattern$
    getstring = ""
    Select Case LCase(Titel)
    Case "name": strpattern = "\]([A-zžöäüßèáâéšíøòóåæê!@\s\(\)\-\–\/\d\.\+\*\~\'\#\_\,\:]+) _
    Case "plz_ort": strpattern = "\[([A-zžöäüßøòåæê\s\W]+\d*)\]$"
    Case "strasse": strpattern = ";\s*([A-zžöäüßèàáâéšíùøòóåæê'\s\(\)\,\.\-\\\/\d]+)\["
    Case "tel": strpattern = "[\sA-z\.\:]*(\+*\d*[\-\/\(\s]*\d+[\-\-\/\)\s\d]*\d{2,}[\d\s\-\ _
    /]*\d+[\sA-z\.\:]*[\sA-z\.\:]*\+*\d*[\-\/\(\s]*\d*[\-\/\)\s\d]*\d{2,}[\d\s\-\/]*\d*)"
    Case "telnr": strpattern = ";\W*(\+?\d{1,3}[\s*\d]{4,})"
    Case "mail": strpattern = "\b([^\s]+@[^\s]+\.\w+)\b"
    Case "preis": strpattern = "(\d+\.\d\d\s*EUR.*?);"
    Case "offen": strpattern = "((offen|(ge)?öff.*|open)\:.*?)[;\[\b]"
    Case "strom": strpattern = "(s*Strom.*?)\;"
    Case "frischwasserver": strpattern = "(s*Frischwasserver.*?)\;"
    Case "grauwasserent": strpattern = "(s*Grauwasserent.*?)\;"
    Case "abwasserans": strpattern = "(s*Abwasserans.*?)\;"
    Case "frischwasseran": strpattern = "(s*Frischwasseran.*?)\;"
    Case "toilette": strpattern = "(s*Toilett.*?)\;"
    Case "dusche": strpattern = "(s*Dusche.*?)\;"
    End Select
    With CreateObject("vbscript.regexp")
    .ignorecase = True
    .Pattern = strpattern
    If .test(text) Then getstring = Trim(.Execute(text).Item(0).submatches(0))
    End With
    End Function
    

  • Habe sie dann um die Abfragen für „frischwasserver", "grauwasserent", "abwasserans", "frischwasseran", "toilette" und "dusche" erweitert und stehe nun bei „telnr“ vor dem gleichen Problem wie bei den vorhergehenden Abfragen, welche ich im Text nur mit den wichtigsten Unterscheidungsbuchstaben erstellte, mir es aber nicht gelungen ist wenn der Suchtext gefunden wurde die Werte vom vorangestellten Trennzeichen „;“ mit einzubinden.
    Die Abfrage „tel“ hat mir mit dem Ergebnis von/siehe „telnr“ (wo mir das + für Auslandsvorwahl fehlte) Steffen erstellt, wobei alle unterschiedlichen Schreibweisen der Telefonnummern mit berücksichtigt wurden und dann auch das „+“ angezeigt wurde.
  • Case "tel": strpattern = "[\sA-z\.\:]*(\+*\d*[\-\/\(\s]*\d+[\-\-\/\)\s\d]*\d{2,}[\d\s\-\/]*\d+[\sA-z\.\:]*[\sA-z\.\:]*\+*\d*[\-\/\(\s]*\d*[\-\/\)\s\d]*\d{2,}[\d\s\-\/]*\d*)"
    Case "telnr": strpattern = ";\W*(\+?\d{1,3}[\s*\d]{4,})"

  • Userbild
    Habe mich jetzt dazu entschlossen bereits vor der RegEx-Auswertung die vorhandenen TelNr. zu überarbeiten und auf ein einheitliches Format zu bringen, sodass jeder Nummer vor der Landesvorwahl sein „+“ Zeichen hat, alle möglichen Trennzeichen wie „ . / od. –„ durch Leerzeichen auszutauschen.
    Daher sagte ich mir, nach der Bereinigung der TelNr. müsste doch die Suche von „+“ und den danach folgenden Zahlen und Zeichen bis zum nächsten „;“ genügen.
    Wird auch nun bei der Abfrage mit „telnr“ bestens gemacht aber das vorangestellte „+“ unterschlagen.
    Userbild
    Was und wie müsste ich bei der Anfrage ändern um das vorhandene „+“ auch mit auszuwerten?
    Habe schon alles möglich versucht, im WEB x Seiten gelesen aber bis jetzt ohne Erfolg.
    Da Steffen sich derzeit nicht mehr meldet hoffe ich es kann mir ein anderer RegEx-Spezialist da weiter helfen und wenn geht auch begründen wieso und warum man es anders machen muss, denn ich möchte ja was dazulernen.
    Gruß Siegfried

    16
    Beiträge zum Forumthread
    Beiträge zu diesem Forumthread

    Betreff
    Datum
    Anwender
    Anzeige
    AW: RegEx und seine Geheimnisse
    24.04.2020 20:23:20
    Hajo_Zi
    Hallo Siegfried,
    Du bist im falschen Forum. Bildbearbeitung ist ein anderes.
    Bilder lade ich mir nicht runter, da Excel damit nichts anfangen kann.
    Hochgeladene Bilder können zwar als solche in Excel importiert werden, sind jedoch bei der Lösung von Problemen nicht sehr hilfreich, da man die eigentlichen Daten nicht ohne große und zeitraubende Umwege direkt in die Tabelle übertragen kann.
    Ich baue keine Datei nach, die Zeit hat schon jemand investiert.
    Schau mal hier
    Eine hochgeladene Arbeitsmappe erhöht die Wahrscheinlichkeit, dass Du eine Lösung für Dein Problem erhältst.
    Erstelle folglich bitte eine Demomappe, aus der deine Aufgabenstellung klar erkennbar ist und lade diese hoch.
    Wenn du an Stelle einer Demomappe deine Originalmappe hochladen willst, diese aber sensible Daten enthält, kannst du diese Daten
    http://www.ms-office-forum.de/forum/showthread.php?t=322895
    änderrn.
    Falls Du den Download des Forums nicht benutzen möchtest beachte bitte: von unsicheren Servern file-upload lade ich keine Datei herunter (lt. Einschätzung meines Virenprogramms)
    Das ist nur meine Meinung zu dem Thema.

    Anzeige
    AW: RegEx und seine Geheimnisse
    24.04.2020 22:33:15
    Siegfried
    Hallo Hajo_Zi,
    da muss was mit der Forums - Soft nicht stimmen das die Bilder nicht angenommen/gezeigt werden.
    Eine Demomappe würde wahrscheinlich nichts bringen, Steffen ersuchte mich damals auch die gesamte Mappe hochzuladen und hatte mir dafür einen LINK gegeben.
    Wenn ich deinen LINK mit http://www.ms-office-forum.de/forum/showthread.php?t=322895 anklicke tut sich leider nichts.
    Eine Demomappe muss ich mir erst wieder machen nur 300KB ist halt nicht viel an Daten.
    Gruß Siegfried
    AW: RegEx und seine Geheimnisse
    25.04.2020 09:42:04
    Sulprobil
    Hallo Siegfried,
    Lösche das Fragezeichen nach dem Pluszeichen, wenn Du sicher bist, dass ALLE Telefonnummern mit dem Pluszeichen beginnen, oder ersetze das W davor durch die eckige Klammerklasse mit der Aufführung aller Wortzeichen, die Du vor der Telefonnummer wegschlucken willst.
    Da kannst Du Hajo's Textbausteine auch gern mit hinein tun.
    Viele Grüße,
    Bernd P
    AW: RegEx und seine Geheimnisse
    25.04.2020 11:00:43
    Siegfried
    Hallo Bernd P,
    ja das entfernen des ? nach dem Pluszeichen hat für das erste die Lösung gebracht.
    Nun habe ich Datensätze dabei welche 2 bis 3 TelNr. haben, welche ich durch "od." getrennt habe.
    Diese werden mir nun mit der Auswertung "telnr" nicht mehr aufgelistet, was müsste man da ergänzen bzw. anpassen?
    Gruß Siegfried
    Anzeige
    AW: RegEx, Telnr durch "od." getrennt
    25.04.2020 12:00:25
    Sulprobil
    Hallo Siegfried,
    Teste bitte selbst ein paar Eingaben:
    http://www.regexe.de/
    Wo kommst Du nicht weiter?
    Viele Grüße,
    Bernd P
    AW: RegEx, Telnr durch "od." getrennt
    25.04.2020 12:16:40
    Siegfried
    Hallo Bernd P
    nun das mit dem od. konnte ich inzwischen lösen, siehe
  • Case "telnr": strpattern = ";\W*(\+\d{1,3}[\od. +{3}\s*\d]{4,})"

  • zeigt mir nun auch die 2. und 3. TelNr. an.
    Jetzt möchte ich noch versuchen die Text-suche zu verkürzen, eben nur mehr Teile zur Suche eingeben und dann eben den Rest vom ; bis zur Fundstelle und den Resttext bis zum nächsten ; auszulesen.
    Bin gespannt ob ich da eine Lösung finde.
    Gruß Siegfried
    Anzeige
    AW: RegEx, Telnr durch "od." getrennt
    25.04.2020 18:17:11
    Siegfried
    Hallo Bernd P und @alle anderen RegEx-Experten,
    es ist mir leider nicht gelungen, es befindet sich in einem String welcher durch ; unterteilt ist mehrere Begriffe.
    Unter anderem die Bezeichnungen „Strom; Frischwasservers.; Grauwasserents.; Abwasseranschluss; Frischwasseranschl.; Toiletten; Duschen;
    Um dies nun mit RegEx abzufragen und in einzelne Spalten zu übertragen verwende ich momentan

  • Case "strom": strpattern = "(s*Strom.*?)\;"
    Case "frischwasserver": strpattern = "(s*frischwa.*?)\;"
    Case "grauwasserent": strpattern = "(s*grauwa.*?)\;"
    Case "abwasserans": strpattern = "(s*abwasse.*?)\;"
    Case "frischwasseran": strpattern = "(s*frischwasseran.*?)\;"
    Case "toilette": strpattern = "(s*Toil.*?)\;"
    Case "dusche": strpattern = "(s*Dusche.*?)\;"

  • Hätte nun versucht die Abfragen mit Teilen aus den Wörtern wie, „trom“,„wasserve“, „wasserent“, „wasseran“, „ischwa“, „lette“ und „dusch“ durchzuführen, wobei jener Teil vor dem Suchbegriff beginnend beim davor liegendem ; und der eventuelle Teil nach dem Suchbegriff bis zum nächsten ; auszulesen wäre.
    Das mit dem nachfolgenden Teil funktioniert ja so wie ich es jetzt definiert habe.
    Nur den vorderen Teil vom ; bis zum Suchbegriff bekomme ich nicht hin, oder ist es so gar nicht möglich?
    Gruß Siegfried
    Anzeige
    AW: RegEx, Telnr durch "od." getrennt
    26.04.2020 14:09:17
    Siegfried
    Hallo @alle,
    ich finde leider keine Lösung für das von mir auferlegte Problem zu lösen.
    Egal mit was ich es versuche, wie z.B. www.regexe.de oder in "Regulärer Ausdruck" von WIKIPEDIA aufrufbaren LINK's, im Gegenteil bin langsam noch mehr verwirrter als zu Beginn.
    Was möchte ich erreichen:
    Heraussuchen ob ein Begriff mit "Frischwasserver" vorkommt dafür aber nur eine Kurzform des Suchbegriffes
  • Case "frischwasserver": strpattern = "(s*wasserve.*?)\;"
  • verwenden.
    OK ab dem gefundenen Suchbegriff bis zum nächsten ; wird mir alles gebracht nur nicht der Beginn vom Vorhergehendem ; bis zum "wasserve" es fehlt also der Teil "Frisch".
    Daher meine Frage ist es möglich die Suche so zu gestalten das vom Vorhergehenden ; bis zum gefundenem Suchbegriff, also das "Frisch" auch mit ausgewertet wird?
    Oder liege ich da in meinen Wünschen total falsch?
    Lieber Bernd P, du hast mir in deiner Antwort vom 25/04/20 die Frage gestellt "Wo kommst du nicht weiter" also hier hänge ich total, habe eben z.B. mit www.regexe.de einiges versucht führte leider nichts zum Erfolg, außer Fehlerhinweise wie diesen "Unmatched closing ')' near index 14" bekomme ich leider keine Hilfestellung.
    Frage gibt es einen Liste was die einzelnen Fehlernummern bedeuten, wo findet man die?
    Oder dein Hinweis "Da kannst Du Hajo's Textbausteine auch gern mit hinein tun.", wo finde ich die bitte?
    Gruß Siegfried
    Anzeige
    AW: strpattern = "([^;]*wasserver.*?)\;"
    26.04.2020 16:16:20
    Sulprobil
    Hallo Siegfried,
    Den Hinweis auf Hajos Textbausteine kannst Du ignorieren. Ich finde lediglich seine Standardantworten wenig hilfreich.
    Ich hoffe,
    
    strpattern = "([^;]*wasserver.*?)\;"
    
    hilft Dir weiter.
    Der Teil
    
    [^;]*
    
    trifft alles seit dem vorherigen ";" Zeichen.
    Schau Dir aber bitte weiter die Regex Syntax Regeln an, z. B. auf meiner Seite
    http://www.sulprobil.com/Get_it_done/IT/Excel_Fun/Strings/RegExp/Reg_Exp_Syntax_Rules/reg_exp_syntax_rules.html
    Du solltest unabhängiger von fremder Hilfe werden :-)
    Viele Grüße,
    Bernd P
    Anzeige
    AW: strpattern = "([^;]*wasserver.*?)\;"
    26.04.2020 18:06:19
    Siegfried
    Hallo Bernd P,
    DANKE für die Lösung, hatte alles mögliche versucht, nur in Kombination mit [^;]* und das nach der Klammer ( bin ich natürlich nicht gekommen, ja mit 76 ist es nicht mehr so einfach, Hi.
    AW: Ich danke Dir!
    26.04.2020 20:13:57
    Sulprobil
    Halli Siegfried,
    ich danke Dir für Deine beiden Dankeschöns!
    Viele Grüße,
    Bernd P
    AW: Ich danke Dir!
    27.04.2020 09:21:10
    Siegfried
    Hallo Bernd
    könntest du mal bitte deinen LINK prüfen?
    Userbild
    ^
    Gruß Siegfried
    AW: Bitte sende mir Deine Email
    27.04.2020 11:09:00
    Sulprobil
    Hallo Siegfried,
    bitte sende an diese Adresse Deine Email:
    Siehe
    http://sulprobil.com/Contact/contact.html
    Ich sende Dir die Datei dann direkt.
    Ich bin leider gerade nicht an meinem Rechner.
    Viele Grüße,
    Bernd P
    Anzeige
    AW: Bitte sende mir Deine Email
    27.04.2020 12:47:13
    Siegfried
    Hallo Bernd,
    habe gestern bereits auf der WEB meine Daten hinterlegt.
    Gruß Siegfried
    AW: Bitte sende mir Deine Email
    27.04.2020 15:23:59
    Sulprobil
    Hi Siegfried,
    ich kann da Deine Email nicht sehen.
    Bitte sende sie an meine Email, sonst kann ich Dir den neuen Download Link nicht senden.
    Viele Grüße,
    Bernd P

    Beliebteste Forumthreads (12 Monate)

    Anzeige

    Beliebteste Forumthreads (12 Monate)

    Anzeige
    Anzeige
    Anzeige