首页 > 解决方案 > 您可以使用 regexp_replace 从一个字符串中替换多个模式匹配项吗?

问题描述

这是一个示例字符串:Year,Quarter,Month,text1,text2,Department,BU,text3,text4,Job,Grade,Pay,Location,text5,text6,

我需要删除所有出现的随机文本。规则是:

  1. 随机文本总是成对出现,一个接一个。
  2. 两个文本中的第一个总是以单词“namesa”开头,但是长度是不可预测的,但第二个则没有这样的模式。例如,text1 可以是“namesa-their duty 505”,text3 可以是“namesa-silver lane near me”,text5 可以是“namesa-regexp 101 challenge”。text2、text4、text6 是完全不可预测的。
  3. 这些文本均不包含逗号。它们仅以逗号结尾。
  4. 整个模式重复的次数是不可预测的。

select ('Year,Quarter,Month,namesa-their duty 505,text2,Department,BU,namesa-silver lane near me,text4,Job,Grade,Pay,Location,namesa-regexp 101 challenge,text6,') from dual ;

对于上面的输入,我的输出应该是:Year,Quarter,Month,Department,BU,Job,Grade,Pay,Location,

基本上,我们需要找到单词“namesa”——从那里开始,经过两个逗号,从namesa 到第二个逗号删除所有内容,然后对字符串的其余部分再次重复相同的操作。我不知道如何在正则表达式中做到这一点。

标签: oracleregexp-replace

解决方案


所以你有一个逗号分隔的标记字符串,你试图替换每个以“namesa”开头的标记并删除它和下面的标记?尝试这个:

regexp_replace(col1, 'namesa[^,]*,[^,]*,', '')

所以分解为:

  1. 字符串“namesa”
  2. 零个或多个非逗号字符
  3. 逗号(结束第一个标记)
  4. 零个或多个非逗号字符
  5. 逗号(结束第二个标记)

SQLFiddle


推荐阅读