2016-07-21 19 views
2

Ich mag die „775“ in der Zeichenfolge „one 234 zwei 449 drei 775 f4our“, (der die letzte 3 stellige Zahl mit einer unbekannten Anzahl der Vorkommen) Übereinstimmen mit "f4our" für eine unbekannte Anzahl von Zeichen (Buchstaben, Ziffern, Leerzeichen, aber nicht 3 oder mehr Ziffern in einer Zeile). Ich habe den regulären Ausdruck "(\ d {3}). würde ausreichen, um die anstelle der zu bekommen, aber das scheint nicht zu funktionieren.Vba regulärer Ausdruck letztes Vorkommen

Gibt es eine Möglichkeit, dies mit VBA regulären Ausdrücken zu erreichen?

Antwort

3

Beachten Sie, dass (\d{3}).*?$ nur die ersten drei aufeinander folgenden Ziffern abgleicht und in Gruppe 1 einfängt und dann alle 0+ Zeichen außer einem Zeilenumbruch bis zum Ende der Zeichenfolge abgleicht.

Sie müssen den 3-stelligen Chunk am Ende der Zeichenkette, der nicht gefolgt wird, mit einem 3-stelligen Chunk irgendwo hinterher bringen.

Sie können eine negative Vorschau (?!.*\d{3}) verwenden, um eine Beschränkung auf das Spiel zu verhängen:

\d{3}(?!.*\d{3}) 

Siehe regex demo. Oder - wenn Sie die 3 Ziffern werden als ganzes Wort angepasst werden:

\b\d{3}\b(?!.*\b\d{3}\b) 

Siehe another demo