2016-12-29 3 views
0

Я хочу заменить все «пространства» на «&« исключая »| 'in regexp_replaceOracle Regexp_replace

Для примера:' создать | удалить учетную запись '-> ожидать вывод как' create | удалите & аккаунт.

Я пытаюсь с SQL

select regexp_replace('create | delete account','\s [^\s\|\s]',' & ') from dual 

Но я делаю что-то здесь не так. Может ли кто-нибудь помочь в этом.

+0

Если у вас есть последовательность пробелов, вам нужно заменить каждое пространство «&»? Кроме того, возможно ли, что у вас есть символ «&» в вашей стартовой строке? – Aleksej

ответ

3

Я думаю, что это то, что вы хотите:

select regexp_replace('create | delete account', '([^\|]) ([^\|])', '\1 & \2') 
from dual 

Логика здесь заключается в том, чтобы делать замену, когда пространство должно происходить между двумя символами нетрубки. Я захватываю эти символы с помощью круглых скобок, а затем их заменяю через \1 и \2.

+1

Используйте '([^ \ |]) \ s + ([^ \ |])' для более чем трех пространств. +1 хотя. – GurV

+0

@GurwinderSingh Спасибо за комментарий и upvote :-) –

+0

@ Tim Biegeleisen - Спасибо .. Это решило .. Мне понравилось то, как вы видели требование (т.е.) «Заменить пространство между двумя символами нетрубки» –

0

Если вам нужно заменить каждое пространство со строкой ' & ', и нет никакого '&' в стартовой строке, вы можете избежать регулярных выражений:

select replace (replace('create | delete account', ' ', ' & '), ' & | & ', ' | ') from dual