【问题标题】:REGEXP_REPLACE - remove new line \n from string ONLY if is enclosed in ()'sREGEXP_REPLACE - 仅当包含在 () 中时才从字符串中删除新行 \n
【发布时间】:2013-02-16 09:35:05
【问题描述】:

我正在尝试使用 REGEXP_REPLACE 替换字符串中的所有新行 (\n),但有一个例外 - 它们必须括在括号中才能被替换。

例子:

字符串前:

'a\n, b\n, c (a\n, b, c\n), d\n, e'
var1 := 'a
, b
, c (a
, b, c
), d
, e'

字符串后:

'a\n, b\n, c, (a b c), d\n, e'
var2 := 'a
, b
, c (a, b, c), d
, e'

我知道必须有一个干净的正则表达式模式可以做到这一点 - 但我无法理解它。

非常感谢...

【问题讨论】:

  • 对于Perl语言来说很简单,但是对于oracle..嗯..不知道,它支持哪种正则表达式。 [\(](?:(.+)\n?)+[\)] 替换为 $1 - 这与 (.+) 匹配
  • 找到这个:* REGEXP_REPLACE(column_name, '(()|^).*?((|$))|,', '\1') * 来自:remove commas * 但是我无法使 \n 工作。

标签: sql regex oracle plsql


【解决方案1】:
var2 := regexp_replace(var1, '((\)|^).*?(\(|$))|'||chr(10), '\1', 1, 0, 'n');

【讨论】:

  • Egor,有点相关,如果我想用其他东西替换它而不是删除它,正则表达式会是什么样子。例如:'a('||chr(10)||')b' --> 'a(NEWLINE)b' ?
  • @TANguyen - 我不知道。您可以为它打开新问题。
猜你喜欢
  • 2011-10-13
  • 2019-08-09
  • 1970-01-01
  • 2022-12-17
  • 2021-03-19
  • 2019-11-18
  • 1970-01-01
  • 2014-06-22
  • 2021-10-13
相关资源
最近更新 更多