oracle - 您可以使用 regexp_replace 从一个字符串中替换多个模式匹配项吗?
问题描述
这是一个示例字符串:Year,Quarter,Month,text1,text2,Department,BU,text3,text4,Job,Grade,Pay,Location,text5,text6,
我需要删除所有出现的随机文本。规则是:
- 随机文本总是成对出现,一个接一个。
- 两个文本中的第一个总是以单词“namesa”开头,但是长度是不可预测的,但第二个则没有这样的模式。例如,text1 可以是“namesa-their duty 505”,text3 可以是“namesa-silver lane near me”,text5 可以是“namesa-regexp 101 challenge”。text2、text4、text6 是完全不可预测的。
- 这些文本均不包含逗号。它们仅以逗号结尾。
- 整个模式重复的次数是不可预测的。
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 到第二个逗号删除所有内容,然后对字符串的其余部分再次重复相同的操作。我不知道如何在正则表达式中做到这一点。
解决方案
所以你有一个逗号分隔的标记字符串,你试图替换每个以“namesa”开头的标记并删除它和下面的标记?尝试这个:
regexp_replace(col1, 'namesa[^,]*,[^,]*,', '')
所以分解为:
- 字符串“namesa”
- 零个或多个非逗号字符
- 逗号(结束第一个标记)
- 零个或多个非逗号字符
- 逗号(结束第二个标记)
推荐阅读
- win32com - 如何在 Win32com 中使用 TextToColumns
- c# - 二十一点获胜条件
- python - 访问 pandas 系列某些索引时的关键错误
- javascript - 如果带有 ageDifference 的语句未正确计算最接近的年龄
- javascript - Sequelize - 使用 MySQL 选择所有超过 5 分钟的记录的抽象查询
- icalendar - 为什么我的 .ics 文件中没有显示标题和位置?
- php - 如何在 Vbulletin 论坛 4.2.2 中向用户隐藏 SQL 错误?
- swift - 如何在 Swift 中为 CaseIterable 枚举实现“下一个”属性
- javascript - 未在 API 调用上的跨子域请求上发送 Cookie
- python - 用户的输入将用作使用 python 连接到 sql server 的凭据