我正在寻找解决方案。
我有类似"AAAAAA 8 BBBBBB 5"
的字符串
我必须用-
代替数字前的空格,而用_-_
代替其他空格。
有人可以帮我吗?
答案 0 :(得分:3)
我将使用2个regexp_replace来做到这一点,像这样:
with the_string as (
select 'AAAAAA 8 BBBBBB 5' s from dual
),
the_string_with_numbers_done as (
select regexp_replace (s,' (\d)','-\1') s from the_string
)
select regexp_replace (s,' ','_-_') from the_string_with_numbers_done
;
以下是有关regexp_replace的信息:https://docs.oracle.com/database/121/SQLRF/functions163.htm#SQLRF06302
这是我喜欢用来处理正则表达式的网站:https://regexr.com/
编辑:根据OP的后续注释对版本进行了略微更改-更改了空白处理,因为OP在某些情况下似乎希望将连续的空白作为一个处理。但是,对于我来说,要求仍然不是100%明确,尤其是blank blank number
应该变成:dash number
或underscore dash underscore dash number
。以下版本采用前一种(dash number
)。 HTH
with the_string as (
select 'AAAAAA 8 BBBBBB 5' s from dual
),
the_string_with_numbers_done as (
select regexp_replace (s,' +(\d)','-\1') s from the_string
)
select regexp_replace (s,' +','_-_') from the_string_with_numbers_done
;+
答案 1 :(得分:1)
您可以在此处使用REGEXP_REPLACE
。
示例:
select regexp_replace(
regexp_replace('AAAAAA 8 BBBBBB 5', '\s([[:digit:]]+)', '-\1', 1, 0),
'([[:digit:]]+\s)', '\1_-_', 1, 0) as str
from dual;
STR
--------------------
AAAAAA-8 _-_BBBBBB-5
此处有更多信息:https://docs.oracle.com/database/121/SQLRF/functions163.htm#SQLRF06302
答案 2 :(得分:0)
我还添加了
with the_string as (
select TEST s from AA_TEST
),
**multiple_spaces as (
select regexp_replace (s, '\s{2,}', ' ') s from the_string
),**
the_string_with_numbers_done as (
select regexp_replace (s,' (\d)','_\1') s from multiple_spaces
)
select regexp_replace (s,' ','_-_') from the_string_with_numbers_done
;
现在,一切正常