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;
如果有人能帮助我就太好了。
您的样本量很小,但以下正则表达式可以解决您的问题。它可能会与其他一些输入中断,但请不要指望我们猜测您的模式。
正则表达式解释:
\(
匹配左括号
.*?
非贪婪地匹配任何字符零次或多次
(
开始子表达式。这稍后在替换字符串中用 </code> 反向引用。</li>
<li><code>[[:alpha:]]+
匹配一个或多个字母字符
)
结束子表达式
.*?
非贪婪地匹配任何字符零次或多次
\)
匹配结束括号
例子
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
我卡住了,一两行都找不到解决方案。
实际上我有一个字符串,例如"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;
如果有人能帮助我就太好了。
您的样本量很小,但以下正则表达式可以解决您的问题。它可能会与其他一些输入中断,但请不要指望我们猜测您的模式。
正则表达式解释:
\(
匹配左括号.*?
非贪婪地匹配任何字符零次或多次(
开始子表达式。这稍后在替换字符串中用</code> 反向引用。</li> <li><code>[[:alpha:]]+
匹配一个或多个字母字符)
结束子表达式.*?
非贪婪地匹配任何字符零次或多次\)
匹配结束括号
例子
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