Microsoft Excel

Herbers Excel/VBA-Archiv

Reguläre Ausdrücke

Betrifft: Reguläre Ausdrücke von: Golem
Geschrieben am: 04.08.2014 19:25:23

Hallo Excel-Fachleute,

ich habe ein Makro erstellt, um in ca. 1.000 Zeilen unterschiedliche Texte zu bereinigen ( mein erster
Versuch mit RegEx ).

Public Function Text_bereinigen(sText As String) As String
Dim RegEx As Object

' Für das Entfernen bestimmter Zeichen aus einem String, wird hier die Replace-Methode  _
verwendet ( RegEx ).....

    Set RegEx = CreateObject("Vbscript.Regexp")
    
        With RegEx
    
           .Pattern = "(NICHT|BEZAHLT|EU|[0-9]?[0-9]{3}[,][0]{2}|ENT-|GELT|FREMD|[0-9]?[0-9][,][ _
0]{2}|EIGEN|[0-9]?[0-9][,][0]{2}|EU|KTO-NR.|FALSCH)|" & _
                           "[+ZV][0-9]{20}[ ]?[0-9]{2}|" & _
                           "(BAHNHOFSTR)[.]?[ ]?[1-9][ ]?[-]?[1-3]?[3]?|[0-3][ ]?[0-9][ ]?[.][ ] _
?[0-1][ ]?[0-9][ ]?[.][ ]?[0-1][ ]?[0-9]|" & _
                           "[2-8][ ]?[0][ ]?[0-9][ ]?[0-9]|" & _
                           "[H][A-U]{2}[S][ ]?[1-4]|" & _
                           "[ -.A-Z]"

           .Global = True           ' Jedes Auftreten wird berücksichtigt.....
        
           .IgnoreCase = True       ' ignoriere Gross- und Kleinschreibung.....
        
           Text_bereinigen = .Replace(sText, "")
           
        End With
    
    Set RegEx = Nothing
    
End Function
Dieses Makro funktioniert auch bisher einwandfrei. Aber ich gehe davon aus, dass das Makro noch optimiert werden kann.

Meine Frage ist, ob ein RegEx-Profi den Aufwand betreiben würde, mein Makro zu optimieren. Durch diese Optimierung
erhoffe ich mir einen erheblichen Lerneffekt.

Für die evtl. Bemühung schon mal besten Dank!

Werner

  

Betrifft: AW: Reguläre Ausdrücke von: Daniel
Geschrieben am: 04.08.2014 19:46:01

HI

für eine Optimiertung ist es immer Hilfreich, wenn du zusätzlich zum Code auch noch beschreibst, was die Aufgabenstellung ist und was du erreichen willst.
Gruß Daniel


  

Betrifft: AW: Reguläre Ausdrücke von: Alice
Geschrieben am: 04.08.2014 20:54:38

Hallo RegMacher
RegEx immer wieder zu initialisieren ist bööööööööööse
wird bestimmt ganz viel ganz schneller wenn vorher gedingst.
Alice - die vom Wunderland


  

Betrifft: Und nu iss Daniel wieder Alice... :-)) owT von: Luc:-?
Geschrieben am: 04.08.2014 21:42:20

:-?


  

Betrifft: AW: Und nu iss Daniel wieder Alice... :-)) owT von: ransi
Geschrieben am: 04.08.2014 22:39:59

Hallo

Es wäre hilfreich wenn du mal ein par typische Beispielstrings reinstellen würdest, und dann erklärst was du daraus brauchst.
Da kann man dann mal dran testen.

ransi


  

Betrifft: AW: Reguläre Ausdrücke von: Golem
Geschrieben am: 04.08.2014 21:04:17

Hallo Daniel,

ist ja auch korrekt. Habe ich vergessen.

Ich habe von einem Gemeinschaftskonto sämtliche Einzahlungen ( ca. 1.000 Kontobewegungen ) eines Jahres als Excel-Datei vorliegen. Aus dem Text, aus der Spalte Verwendungszweck, möchte ich die Wohnungsnummer der Einzahler für die weitere Verwendung extrahieren. Die einzelnen Strings setzen sich teilweise aus Text und Zahlen zusammen und die Einzahler verwenden viele Textvariationen, die nicht benötigt werden.

Mit dem Makro konnte ich bisher die Hausnummern auslesen, aber das Pattern ist auf den vorliegenden Text des Jahres 20013
ausgelegt und die Textvariationen können sich sicherlich in den nächsten Jahren ändern. Deshalb ist auch mein Anliegen,
das Makro individueller auszulegen.

Mit

"(NICHT|BEZAHLT|EU|[0-9]?[0-9]{3}[,][0]{2}|ENT-|GELT|FREMD|[0-9]?[0-9][,][0]{2}|EIGEN|[0-9]?[0-9][,][0]{2}|EU|KTO-NR.|FALSCH)|" &

entferne ich folgenden Stringteil: "NICHT BEZAHLT EU 333,00ENT- GELT FREMD03,00EIGEN03,00EU KTO-NR. FALSCH" .

Mit

"[+ZV][0-9]{20}[ ]?[0-9]{2}|" & entferne ich folgenden Stringteil: "ZV01001524033655000000 02" .

Mit

"(BAHNHOFSTR)[.]?[ ]?[1-9][ ]?[-]?[1-3]?[3]?|[0-3][ ]?[0-9][ ]?[.][ ]?[0-1][ ]?[0-9][ ]?[.][ ]?[0-1][ ]?[0-9]|" &

entferne ich folgenden Stringteilkombinationen: "BAHNHOFSTR.7" ,"BAHNHOFSTR.9" , "BAHNHOFSTR.11" ,"BAHNHOFSTR.13" ,"BAHNHOFSTR.7 13" , "BAHNHOFSTR.7-13" oder "BAHNHOFSTR.713" ( evtl. auch noch weitere Möglichkeiten ).

Mit

"[2-8][ ]?[0][ ]?[0-9][ ]?[0-9]|" & entferne ich folgenden Stringteil: Jahreszahl 2013 bis 2099 mit alle Variationen ( z. B.
20 13 oder 2 013 usw. ).

Mit

"[H][A-U]{2}[S][ ]?[1-4]|" & entferne ich folgenden Stringteilkombinationen: "Haus 1", "Haus1", "Haus 2", "Haus2", "Haus 3", "Haus3"
"Haus 4", "Haus4", "Haus1-4", "Haus14", "Haus 1 4" usw. .

Mit dem letzten Teil

"[ -.A-Z]" entferne ich die Bindestriche, Punkte und die restlichen Buchstaben.

Ein bisschen viel Text, aber ich hoffe, dass ich mich verständlich ausgedrückt habe.

Schöne Grüße
Werner


 

Beiträge aus den Excel-Beispielen zum Thema "Reguläre Ausdrücke "