没有空格的 Oracle 正则表达式
Posted
技术标签:
【中文标题】没有空格的 Oracle 正则表达式【英文标题】:Oracle regexp without white space 【发布时间】:2017-03-09 21:54:22 【问题描述】:我需要在两个单词之间替换所有没有空格的地方,其中第一个以点结尾,这两个单词在它们之间带有空格。
例如,我有'num.some'
这样的字符串,我需要'num. some'
但是如果我有'num. some'
,我就不需要'num. some'
(
如果我有'123.4'
,我也不想要'123. 4'
如果我有'123.some'
,我需要'123. some'
我尝试了不同的正则表达式组合,但我的答案总是有问题。
【问题讨论】:
请发布您到目前为止尝试过的内容以及遇到的问题 你能在数据中有some.123
吗,那还需要加空格吗?
【参考方案1】:
这样的事情可能会对你有所帮助:
WITH examples AS (
SELECT 'num.some' str FROM dual
UNION
SELECT 'num. some' str FROM dual
UNION
SELECT '123.4' str FROM dual
UNION
SELECT '123.some' str FROM dual
)
SELECT str, REGEXP_REPLACE(str,'([a-zA-Z0-9]+)\.([a-zA-Z]+)','\1. \2') replaced
FROM examples
这会在一个字母之后寻找一个点,然后是一个没有空格的字母
【讨论】:
第二个单词重复两次(后面的单词。)我有“dol.USA”,而这个是“dol.USA”。美国'我不明白为什么? @AnastasiaSisordia 它也为我和“dol.USA”一起工作【参考方案2】:这会查找所有组合(letter.letter、letter.digit、digit.letter)并在 .同时保持 digit.digit 不变。
with
inputs ( str ) as (
select 'ab.sw' from dual union all
select 'ab. sw' from dual union all
select '12.33' from dual union all
select '12. 33' from dual union all
select 'ab.123' from dual union all
select '1. ab' from dual union all
select '1.abc' from dual
)
-- END test data. Solution (SQL query) begins below this line.
select str, regexp_replace(str,
'(([[:alpha:]]\.)([[:alpha:]])|([[:alpha:]]\.)(\d)|(\d\.)([[:alpha:]]))',
'\2\4\6 \3\5\7') as new_str
from inputs
;
STR NEW_STR
------ -------
ab.sw ab. sw
ab. sw ab. sw
12.33 12.33
12. 33 12. 33
ab.123 ab. 123
1. ab 1. ab
1.abc 1. abc
【讨论】:
【参考方案3】:也许您不需要正则表达式。普通的replace()
可能对你有好处。
(关于@mathguy 的测试数据)
with
inputs ( str ) as (
select 'ab.sw' from dual union all
select 'ab. sw' from dual union all
select '12.33' from dual union all
select '12. 33' from dual union all
select 'ab.123' from dual union all
select '1. ab' from dual union all
select '1.abc' from dual
)
-- END test data. Solution (SQL query) begins below this line.
select replace(
replace(str, '.', '. ') -- replace all dots by dot+space
, ' '
, ' '
) -- replace all double spaces by a single space
from inputs
;
【讨论】:
以上是关于没有空格的 Oracle 正则表达式的主要内容,如果未能解决你的问题,请参考以下文章