【问题标题】:Oracle Regexp_replaceOracle 正则表达式_replace
【发布时间】:2017-05-13 20:28:34
【问题描述】:

我想用 ' & ' 替换所有 'Spaces' 不包括 ' | ' 在 regexp_replace 中

例如:'创建 |删除帐户'-> 期望输出为'创建 |删除和帐户”。

我正在尝试使用 sql

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

但是我在这里做错了。谁能帮忙解决一下。

【问题讨论】:

  • 如果你有一个空格序列,你需要用'&'替换每个空格吗?另外,您的起始字符串中是否有可能包含字符“&”?

标签: sql oracle


【解决方案1】:

我想这就是你想要的:

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

这里的逻辑是在两个非管道字符之间出现空格时进行替换。我使用括号捕获这些字符,然后通过\1\2 在替换中使用它们。

【讨论】:

  • 超过3个空格的情况使用([^\|])\s+([^\|])。 +1 虽然。
  • @GurwinderSingh 感谢您的评论和支持 :-)
  • @Tim Biegeleisen - 谢谢..它解决了..我喜欢你看到要求的方式(即)'替换两个非管道字符之间的空格'
  • 这可能适用于 OP,但是这样的文本如何:'a | cos(b) exp(c) | z |\lambda|'?管道符号可能仅在一侧出现空格,并且该空格应根据要求替换为' & '
【解决方案2】:

如果您需要用字符串' & ' 替换每个空格,并且您的起始字符串中没有'&',则可以避免使用正则表达式:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-05-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多