RegEx und seine Geheimnisse
24.04.2020 20:18:50
Siegfried
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.
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 "telnr": strpattern = ";\W*(\+?\d{1,3}[\s*\d]{4,})"
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.
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