Regexp Oracle删除美国和加拿大格式的邮政编码之后的所有内容

时间:2017-12-14 02:22:10

标签: regex oracle zipcode regexp-replace

我的地址格式类似于

  

123,abc street,Dallas,Tx 75701,500-998-7898,路线X Y Z west   的

我希望删除与5位数字格式或5位数字+ 4位数字格式以及加拿大邮政编码格式(如Y89 567或Y89567)相匹配的美国格式的邮政编码后的任何内容。

所以我的最终答案应该是这样的。

  

123,abc street,Dallas,Tx 75701

感谢任何帮助。

1 个答案:

答案 0 :(得分:1)

这是一种方法。请注意,任何"看起来像"美国或加拿大的邮政编码将被假定为一个。此外,你会错过Beverly Hills, Calif. 90210之类的东西,因为" Calif。"不是"见过"作为州代码。我也有点粗心;如果邮政编码后面有任何内容,则不应该是字母或数字。我没有写过"测试"为了那个原因;如果需要,可以留下锻炼身体。

我假设如果没有找到邮政编码,则必须返回整个输入字符串。

with
  inputs ( addr ) as (
    select '123, abc street, Dallas, Tx 75701, 500-998-7898'        from dual union all
    select '336 Main St, New City, NZ 39023-8882, john.d@email'     from dual union all
    select '837B Hilltop, Canadian City, ON Z34802 4028048 kilo'    from dual union all
    select '12345 Circle Drive, Lakeview, MN'                       from dual
  )
select addr,
       regexp_substr( addr, 
                      '(.*?([[:alpha:]]{2} \d{5}(-\d{4})?|[[:alpha:]]\d{2} ?\d{3}|$))',
                      1, 1, null, 1) as clean_addr
from   inputs
;

ADDR                                                CLEAN_ADDR                        
--------------------------------------------------- --------------------------------------
123, abc street, Dallas, Tx 75701, 500-998-7898     123, abc street, Dallas, Tx 75701
336 Main St, New City, NZ 39023-8882, john.d@email  336 Main St, New City, NZ 39023-8882
837B Hilltop, Canadian City, ON Z34802 4028048 kilo 837B Hilltop, Canadian City, ON Z34802
12345 Circle Drive, Lakeview, MN                    12345 Circle Drive, Lakeview, MN