我陷入困境,没有找到一两行解决方案。
其实我有一个字符串,例如"罗密欧( - & -must 123)死亡(但123)现在不是"我希望输出像"罗密欧(必须)死(但)现在不是"
我想在oracle中使用regreplace在一行或两行中实现相同的功能。我知道它可以通过使用多线编码实现,但需要有效的方式。
我试过这个但没有工作
select
(REGEXP_REPLACE('Romeo (-& -must 123) die (but123) not now', '\((.*?)\)', '[^A-Z'']')) "REGEXP_REPLACE"
FROM dual;
如果有人可以帮助我,那就太棒了。
答案 0 :(得分:1)
您的样本量很小,但以下正则表达式可以解决您的问题。它可能会打破一些其他输入,但请不要指望我们猜测你的模式。
正则表达式解释说:
\(
匹配开幕式.*?
匹配任何字符零次或多次非贪婪(
启动子表达式。稍后在替换字符串中使用\1
反向引用。[[:alpha:]]+
匹配一个或多个字母字符)
end subexpression .*?
匹配任何字符零次或多次非贪婪\)
匹配闭幕式示例强>
with
t(orig) as (
select 'Romeo (-& -must 123) die (but123) not now' from dual
)
select
orig
,regexp_replace(orig, '\(.*?([[:alpha:]]+).*?\)', '(\1)') as replaced
from t
;
<强>输出强>
ORIG REPLACED
----------------------------------------- ------------------------------
Romeo (-& -must 123) die (but123) not now Romeo (must) die (but) not now