Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1472to1476
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 Suchen/ ersetze

RegEx Suchen/ ersetze
31.01.2016 12:13:44
Stefan

Hallo zusammen,
ich bin gerade dabei, mir eine Funktion zu schreiben, mit der ich durch mehrere
Worksheet suchen und ersetzen kann. Mit instr klappt das auch schon soweit.
Allerdings möchte ich die Suche etwas einschränken/ genauer machen.
Damit meine ich, wenn der Suchstring z.B. 192.168.1.1 ist würde instr auch 192.168.1.100 matchen.
Beispieltext: "192.168.1.100 (192.168.1.1) ,192.168.1.1, 192.168.1.100"
Erschwerend kommt hinzu, das der zu suchende String sich,
innerhalb von () oder ,, oder zwei Leerzeichen, also " 192.168.1.1 " oder am Anfang/ Ende einer Zeile befinden kann.
Ich denke mit instr komme ich hier nicht weiter und wollte es mit einem RegEx versuchen.
Dazu habe ich mir folgende Testfunktion gebastelt:

Sub test()
Dim vstring As String: vstring = "192.168.1.1 192.168.1.100 (192.168.1.1) ,192.168.1.1, 192. _
168.1.100 192.168.1.1"
Dim vsearch As String: vsearch = "192.168.1.1"
Set RE = CreateObject("vbscript.regexp")
RE.Pattern = "[\s,(]" & (vsearch) & "[\s,)]"
RE.Global = True
Set RegExMatches = RE.Execute(vstring)
If RegExMatches.Count <> 0 Then
For i = 1 To RegExMatches.Count
Debug.Print RegExMatches.Item(i - 1).Value
Next
End If
End Sub
Leider werden "192.168.1.1" am Anfang/ Ende nicht gefunden.
Wenn ich um "?" ergänze, also so RE.Pattern = "[\s,(]?" & (vsearch) & "[\s,)]?",
wird zwar die "192.168.1.1" am Anfang/ Ende gefunde aber leider auch in "192.168.1.100".
Mit der "(vsearch)" wollte ich eigentlich nur den gefundenen String zurückbekommen, aber ich bekomme immer den gesamten RegEx Match zurück, also mit Leerzeichen, ",", "(" oder ")".
IP-Adressen war hier nur ein Beispiel, das ganze sollte auch mit Text funktionieren, also z.B. mit folgendem Beispiel:
"test teststring (test) ,test, teststring test"
Ich hoffe ihr könnt mir beim bauen des RegEx weiterhelfen.
Vielen Dank schonmal

4
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
Assertion oder Lookahead
31.01.2016 12:24:47
ransi
Hallo Stefan,
Versuch mal so:
RE.Pattern = vsearch & "(?=\D)"
ransi

AW: Assertion oder Lookahead
31.01.2016 13:39:17
Stefan
Hi,
die "192.168.1.1" am Zeilenende matcht leider nicht.
Zu dem passt das nur für IP-Adressen, der RegEx müsste aber so gehen, das er auch für Text
funktioniert. Beispiel: "test teststring (test) ,test, teststring test"
Gruß
Stefan

vsearch vor Wortgrenze ?
31.01.2016 13:47:09
ransi
HAllo Stefan
RE.Pattern = vsearch & "(?=\b)" ??
ransi

AW: vsearch vor Wortgrenze ?
31.01.2016 15:31:00
Stefan
Hi,
habe es zwischenzeitlich hinbekommen.
Folgendes funktioniert:
RE.Pattern = "^" & (vsearch) & "[\s,)]|[\s,(]" & (vsearch) & "[\s,)]|[\s,(]" & (vsearch) & "$"
Nicht schön aber geht :-)
Vielen Dank für die Hilfe.
Gruß
Stefan

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige