2016-12-29 54 views
0

我想用'&'替换所有'空格',排除'| 'in regexp_replaceOracle Regexp_replace

例如:'create |删除帐户' - > expect输出为'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

对于超过3个空格的情况,使用'([^ \ |])\ s +([^ \ |])''。 +1虽然。 – GurV

+0

@GurwinderSingh感谢您的评论和赞扬:-) –

+0

@ Tim Biegeleisen - 谢谢..它解决了..我喜欢你看到的要求(即)'替换两个非管道字符之间的空间' –

0

如果你需要用字符串' & '更换每一个空间,在你的出发字符串没有'&',你可以避免正则表达式:

select replace (replace('create | delete account', ' ', ' & '), ' & | & ', ' | ') from dual 
相关问题