Oracle Regexp用空格替换\n,\ r和\ t

Tut*_*ngh 14 oracle plsql

我想从一个包含换行符(NL)字符(和其他的表中选择一列\n,\r,\t).我想使用REGEXP来选择数据并用空格替换(只有这三个)字符,"".

APC*_*APC 22

不需要正则表达式.使用ASCII代码和无聊的旧TRANSLATE()可以轻松完成此操作

select translate(your_column, chr(10)||chr(11)||chr(13), '    ')
from your_table;
Run Code Online (Sandbox Code Playgroud)

这将用空格替换换行符,制表符和回车符.


TRANSLATE()比其正则表达式更有效.但是,如果您的心脏设置在该方法上,您应该知道我们可以在正则表达式中引用ASCII代码.所以这个陈述是上面的正则表达式版本.

select regexp_replace(your_column,  '([\x0A|\x0B|`\x0D])', ' ')
from your_table;
Run Code Online (Sandbox Code Playgroud)

调整是以十六进制而不是十进制来引用ASCII代码.

  • TRANSLATE()比其正则表达式更有效.那么为什么要使用正则表达式呢? (2认同)
  • 使用`\ x0A`,`\ x0B`等转义字符的原则对我来说不起作用.Oracle 11g.有谁知道为什么?是否有优化设置? (2认同)
  • @APC `TRANSLATE` 无法将多个换行符折叠为单个替换。我还希望它能够复制 Windows 行结尾的新分隔符。正则表达式版本似乎不适合我。它并不能取代任何东西。不过,这个正则表达式似乎有效:`'(['||chr(10)||chr(11)||chr(13)||']+)'`。(如果您希望单独替换每个实例,请删除“+”。) (2认同)
  • 如果可以替换_all_空格(例如包括制表符),`regexp_replace(text,'\ s +','')`就可以了. (2认同)
  • 对于regexp_replace,这个答案在两个方面是错误的.\ t是chr(9),\n是chr(10),\ r是chr(13),导致正则表达式应该是`\ x09 |\x0A |\x0D`.括号和方括号也不是必需的.正如在给出的答案中,它将导致贪婪的扩展,并且其他角色也将被移除. (2认同)