我有一个像这样的字符串:
(1/8英寸TBE ASME B1.20.1(NPT)外螺纹x Fem CL400 CU合金B152 Gr C10400水泥衬里)
我需要这样的输出:
1/8英寸TBE ASME B1.20.1(NPT)外螺纹x Fem CL400 CU合金B152 Gr C10400水泥衬里
即只能在开头和结尾处除去括号,而不是在中间。
也 如果字符串是这样的,要么有起始括号,要么有结束括号
(1/8英寸TBE ASME B1.20.1(NPT)外螺纹x Fem CL400 CU合金B152 Gr C10400水泥衬里
或
1/8英寸TBE ASME B1.20.1(NPT)外螺纹x Fem CL400 CU合金B152 Gr C10400水泥衬里)
然后不要卸下括号。
我尝试使用regexp_replace,但找不到解决方案。 任何帮助都是可观的
答案 0 :(得分:3)
简单的CASE
足以删除前导和结尾括号
with txt as (
select '(xxxx)' txt from dual union all
select '(x(x)xx)' txt from dual union all
select '(xxxx' txt from dual union all
select 'xxxx)' txt from dual union all
select 'xxxx' txt from dual)
select txt,
case when txt like '(%)' then
substr(txt,2,length(txt)-2)
else
txt
end as new_txt
from txt
给予
TXT NEW_TXT
-------- --------
(xxxx) xxxx
(x(x)xx) x(x)xx
(xxxx (xxxx
xxxx) xxxx)
xxxx xxxx
或者,您可以按以下方式使用REGEXP
select
txt,
nvl(
REGEXP_SUBSTR(txt, '^\((.*)\)$', 1, 1, null, 1),
txt)
as txt_new
from txt
正则表达式'^\((.*)\)$'
强制使用了前括号和后括号,并返回-第一组(REGEXP_SUBSTR的第五个参数)之间的部分。
如果REGEXP_SUBSTR返回注释,即表达式不包含在括号中 ,则NVL
返回原始值。