Oracle SQL - 使用REGEXP_REPLACE()进行正则表达式匹配

时间:2018-02-08 13:10:46

标签: sql regex oracle regexp-replace

早上好,

我希望在编写选择查询以从列中删除某些文本时找到帮助。

我创建了一个名为" TEXT_MINING"的列。在之前的查询中,不同开发人员编写的某些代码将执行一些文本挖掘分析。 TEXT_MINING列的文本如下所示:

雇员在锤子上找到破碎的手柄* 02-08-18 15:19:22 PM *我发现一把锤子在把手上劈开木头,扔进了废料。

我想删除*和两者之间的所有文本*以帮助我的软件工程师进行一些文本挖掘。这是我目前面临的两难困境:

我不仅不知道如何使用REGEXP_REPLACE,而且还无法解决REGEXP问题。我目前有:

^[*]\w[*]$

所以看起来像:

REGEXP_REPLACE(col, '^[*]\w[*]$', '')

有人可以提出建议吗?

谢谢!

2 个答案:

答案 0 :(得分:3)

您可以使用此方法删除列中1次出现的*...*子字符串:

SELECT REGEXP_REPLACE(
   'EMPLOYEE FOUND BROKEN HANDLE ON HAMMER * 02-08-18 15:19:22 PM * I found a hammer that had the wood split on the handle, tossed into scrap.', 
   '\s*\*[^*]*\*', 
   ''
) as Result from dual

请参阅online demo

模式详情

  • \s* - 0+ whitespaces
  • \* - *字符
  • [^*]* - 除*
  • 以外的0个字符
  • \* - *字符。

请参阅regex demo

enter image description here

答案 1 :(得分:2)

这可能是一种方式:

select regexp_replace(yourString, '\*.*\*', '') from yourTable

请注意,这将删除字符串中第一个和最后一个'*'之间的所有内容;例如:

with test(x) as (
select 'Something * something else * and a * just before another * and something more' from dual
)
select regexp_replace(x, '\*.*\*', '') from test

给出:

Something  and something more