我的某些地址格式不正确。如果没有,我想添加一个空格。示例如下所示
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;
答案 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之后会发生什么。