2016-12-20 17 views
0

Ich habe einen Ausdruck wie so:Mit REGEXP_REPLACE mit Leerzeichen

Select regexp_replace('Seattle, WA Se', 'Se', 'SE') 

ich das ‚Es‘ mit ‚SE‘ ersetzen mag, will aber nicht das Wort ‚Seattle‘ berühren. Bisher wurden sowohl "Seattle" als auch "Se" in "SEattle" und "SE" geändert.

Wie füge ich eine Bedingung in der RegExp_Replace Ausdruck zu finden und ändern auf der "Stand-alone" 'Se'?

Danke.

Antwort

0

Ihren regulären Ausdruck ändern zu

'Se$' 

$ bindet an das End-of-string, so 'Se$' bedeutet, dass 'Se' am Ende der Zeichenkette ohne Zeichen, nachdem sie erscheinen. Dies wird die nachfolgende Se übereinstimmen lassen, aber die Se in Seattle wird nicht sein.

Viel Glück.

2

Wie füge ich eine Bedingung in den Ausdruck RegExp_Replace, um auf dem "Stand-Alone" 'Se' zu finden und zu ändern?

Suchen nach einem vorhergehenden Leerzeichen (oder Start-of-the-string) dann Se dann folgende Leerzeichen (oder End-of-the-String) und Referenzen verwenden zurück, um den vorangehenden und nachfolgenden Raum zu halten Zeichen in der Ersatzzeichenkette:

SELECT REGEXP_REPLACE(
     'Seattle, WA Se', 
     '(^|\s)Se(\s|$)', 
     '\1SE\2' 
     ) 
FROM DUAL; 
+0

Als ich zuerst Ihre Antwort ansah, dachte ich, warum benutzen Sie nicht Wortanker? Ich wusste nicht, dass Oracle-Datenbank dies nicht in seiner Reg-Ausdruck-Engine enthält. –

+0

@PatrickBacon Wenn es dann tat, würde es das Leben so viel einfacher machen - besonders wenn man versucht, "Se Se Se" anzupassen - womit diese Antwort Probleme hat (kann aber behoben werden, indem man zuerst eine Wiederholung jedes Leerraumzeichens einfügt zweitens, die oben beschriebene Ersetzung durchzuführen und dann schließlich jeden wiederholten Leerraum zu entfernen, dies ist jedoch eine Menge Arbeit, die einfach durch die Null-Breite-Wortgrenzenübereinstimmung gelöst werden könnte. – MT0

Verwandte Themen