繁体   English   中英

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

[英]Oracle SQL - Regular Expression matching using REGEXP_REPLACE()

早上好,

我希望在编写选择查询以从列中删除一些文本方面寻求帮助。

我在上一个查询中创建了一个名为“ TEXT_MINING”的列,其他开发人员编写的某些代码将对其进行一些文本挖掘分析。 TEXT_MINING列的文本如下所示:

员工在锤子上发现了破碎的手柄* 02-08-18 15:19:22 PM *我发现一把锤子,其手柄上的木头裂开了,被扔掉了。

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

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

^[*]\w[*]$

所以看起来像:

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

有人可以建议吗?

谢谢!

您可以使用这种方法来删除列中超过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

观看在线演示

图案细节

  • \\s* -0+空格
  • \\* -一个*字符
  • [^*]* -除* 0+个字符
  • \\* -一个*字符。

参见regex演示

在此处输入图片说明

这可能是一种方法:

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM