在字符串Regecp Oracle之间插入空格

时间:2018-01-05 14:55:09

标签: sql oracle11gr2

我的某些地址格式不正确。如果没有,我想添加一个空格。示例如下所示

Input          Expected output
-----          ----------------
AVEX           AVE X or AVENUE X
AVE  X         AVE X or AVENUE X
AVENUEX        AVENUE X or AVE X
AVENUE   X     AVENUE X or AVE X
AVEOFCITY      AVE OF CITY  or AVENUE OF CITY

我创建了一个下面的表达式,但它没有给出所有情况下的正确结果,特别是AVENUE分为AVE NUE

SELECT REGEXP_REPLACE('AVENUEN','^(AVE(NUE)*?)(\w)','\1 \3') rep FROM dual;

1 个答案:

答案 0 :(得分:1)

这会让你更近一点。只需稍微调整你的正则表达式以允许可选的'NUE'并在之后处理0或更多空格。

with tbl(id, str) as (
  select 1, 'AVEX'       from dual union all
  select 2, 'AVE  X'     from dual union all
  select 3, 'AVENUEX'    from dual union all
  select 4, 'AVENUE   X' from dual union all
  select 5, 'AVEOFCITY'  from dual
)
SELECT
  id,
  REGEXP_REPLACE(str,'^(AVE(NUE)?) *?(\w)','\1 \3') rep 
FROM tbl;

您可能需要另一个传递来处理'OFCITY',因为谁知道您必须允许的AVENUE之后会发生什么。