我正在编写一个函数来清理PL / SQL中的地址,并希望删除“/ - ”。从数字中间。我怀疑使用regexp_replace应该很容易。不幸的是,我仍然没有把正常的表情包裹好。
所以我的输入可能看起来像“123-4 Cherry Lane”,我希望它看起来像“123 4 Cherry Lane”但我希望“123 Blake-Habersham”看起来像“123 Blake-Habersham”,没有区别。
由于我想从中学到这些不仅仅是复制和粘贴代码,我也想了解答案。
在伪代码中,我想将所有'[任意字符] [1-9]替换为任意长度,后跟分隔符,[0-9]后跟[任意字符]'替换为'[任何字符] [1- 9]任何长度跟随[任何字符]'
答案 0 :(得分:1)
select regexp_replace('123-4 Cherry-Lane 123- -123', '(\d+)\D(\d+)', '\1 \2') from dual;
[至少一位数] [不是数字] [至少一位数] - > [至少一位数] [“空格”] [至少一位数]
如果您确切地知道要替换哪个“非数字”,则可以使用(例如)“[ - 。,@%&]”而不是“\ D”。
或者您可以使用Oracle特殊功能:
regexp_replace('123-4 Cherry-Lane 123- -123', '([[:digit:]]+)[[:punct:]]([[:digit:]]+)', '\1 \2')