Regex 从带有特殊字符的字符串转换为数字

Regex 从带有特殊字符的字符串转换为数字,regex,oracle11g,regexp-replace,regexp-substr,Regex,Oracle11g,Regexp Replace,Regexp Substr,我有一个包含以下值的输入列 1.2% 111.00$ $100.00 aa ss 预期产量 1.2 111.00 100.00 null null 我尝试使用REGEXP\u REPLACE并尝试替换每个不是数字或“.”的字符,以便1.2%将变为1.2。 这是我尝试过的查询,但没有成功 regexp_replace('%1.aa2', '[^[\d|\.]]', '') 有人能建议怎么做吗?我做错了什么?我正在与pl/sql developer一起开发Oracle 11.2数据库。使用P

我有一个包含以下值的输入列

1.2%
111.00$
$100.00
aa
ss
预期产量

1.2
111.00
100.00
null
null
我尝试使用REGEXP\u REPLACE并尝试替换每个不是数字或“.”的字符,以便
1.2%
将变为
1.2
。 这是我尝试过的查询,但没有成功

regexp_replace('%1.aa2', '[^[\d|\.]]', '') 

有人能建议怎么做吗?我做错了什么?我正在与pl/sql developer一起开发Oracle 11.2数据库。

使用POSIX类匹配数字字符,即
[:digit:][/code>。所以这个被求反的类应该匹配任何字符,而不是点或数字

regexp_replace('%1.aa2', '[^[:digit:].]', '') 

您可以使用
[^0-9.]
正则表达式并替换为空字符串:

with testdata(txt) as (
  select 'ss' from dual
  union
  select 'aa' from dual
  union
  select '$100.00'      from dual
  union
  select '111.00$'             from dual
  union
  select '1.2%'             from dual
)
select regexp_replace(txt, '[^0-9.]', '')
from testdata;
调查结果:


只需在模式中使用
[^\d.]+
。这不起作用,它取代了除“.”之外的所有内容。这是我从DualSelect中使用的查询select regexp_replace('%1.aa2','[^\d.]+',''),我想在这种情况下您也必须转义反斜杠。尝试
\\d
而不是
\d
。这与“[^[\d.]”有什么不同?不知道oracle是否支持
\d
。如果它支持,那么它将是
[^\d.]
谢谢@Avinash raj。[:digit]工作正常。我确信oracle也支持'\d'。选中此语句,然后从dual中选择regexp_replace('asasas12313'、'\d'、'-')