Oracle reg_replace 替换匹配项并仅保留字母字符

Oracle reg_replace Replace matched and keep alpha characters only

我卡住了,一两行都找不到解决方案。

实际上我有一个字符串,例如"Romeo (-& -must 123) die (but123) not now" 我想要 "Romeo (must) die (but) not now"

这样的输出

我想在oracle中使用regreplace在一两行中实现相同的功能。我知道它可以通过使用多行编码来实现,但需要以有效的方式。

我试过了但没用

select
  (REGEXP_REPLACE('Romeo (-& -must 123) die (but123) not now', '\((.*?)\)', '[^A-Z'']')) "REGEXP_REPLACE"
  FROM dual;

如果有人能帮助我就太好了。

您的样本量很小,但以下正则表达式可以解决您的问题。它可能会与其他一些输入中断,但请不要指望我们猜测您的模式。

正则表达式解释:

  1. \( 匹配左括号
  2. .*? 非贪婪地匹配任何字符零次或多次
  3. ( 开始子表达式。这稍后在替换字符串中用 </code> 反向引用。</li> <li><code>[[:alpha:]]+ 匹配一个或多个字母字符
  4. ) 结束子表达式
  5. .*? 非贪婪地匹配任何字符零次或多次
  6. \) 匹配结束括号

例子

with
t(orig) as (
  select 'Romeo (-& -must 123) die (but123) not now' from dual
)
select
 orig
,regexp_replace(orig, '\(.*?([[:alpha:]]+).*?\)', '()') as replaced
from t
;

输出

ORIG                                      REPLACED
----------------------------------------- ------------------------------
Romeo (-& -must 123) die (but123) not now Romeo (must) die (but) not now