我在检查了以下主题之后来到这里:包含加号和十进制的正则表达式
我的主要问题是以下,我有错误的数据需要修复。对于电话号码,我们需要删除一些字母和特殊字符。
想象一下,例如这将是数据:
s#sdads+#09232342a
我只想获取+和数字+必须是可选的。
http://www.techonthenet.com/oracle/functions/regexp_substr.php https://docs.oracle.com/cd/B19306_01/appdev.102/b14251/adfns_regexp.htm
如果我从oracle阅读文档,这应该很容易,但是我无法使其正常工作,那我肯定缺少一些基本知识。任何想法?
下面是我尝试过的一些示例:
select regexp_substr('s#sdads+#09232342a','\+*[0-9]+') from dual;
退货
09232342
我期望它考虑+,我也尝试将+放在测试字符串的开头,没有区别。将regexp更改为
[\+]*[0-9]+ or [+]*[0-9]+ or (\+)*(\d)+
并且结果没有差异。
让我感到困惑的部分是,如果我更改测试字符串和正则表达式,它将返回+且仅加
select regexp_substr('+s#sdads+#09232342a','?[\+]*') from dual;
但是如果我将+移开开头就消失了
另外,如果我将数字放在此处,则仅考虑数字:
select regexp_substr('+s#sdads+#09232342a','?[\+]*(\d)+') from dual;
这也不起作用:
select regexp_substr('+s#sdads+#09232342a','?[\+]{0,1}(\d)+') from dual;
您需要#
在+
和之间的数字之间包含一个字符:
查询1-替换所有不需要的字符:
SELECT REGEXP_REPLACE( '+s#sdads+#09232342a', '[^+0-9]' )
FROM DUAL
输出:
++09232342
查询2-匹配整个字符串:
SELECT REGEXP_REPLACE( '+s#sdads+#09232342a', '^.*?(\+?)#(\d+).*$', '\1\2' )
FROM DUAL
输出:
+09232342
查询3-匹配子字符串:
SELECT REGEXP_SUBSTR( '+s#sdads+#09232342a', '\+?#\d+' )
FROM DUAL
(然后,您可以#
通过将该语句包装在另一个替换中来替换无关的内容)
输出:
+#09232342
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句