RegExp_Replace Oracle 中某个单词列表之后的所有内容

Posted

技术标签:

【中文标题】RegExp_Replace Oracle 中某个单词列表之后的所有内容【英文标题】:RegExp_Replace everything after a certain list of words in Oracle 【发布时间】:2013-03-19 16:40:33 【问题描述】:

我在一列中有一个包含 200 个以上单词的列表。 我想替换这些词之后的任何内容。

Eg: E Graham St       DDS  ==> E Graham St
    Trent Ave      4DF ===> Trent Ave

例如 AVE、ST .... 我正在考虑将该字符串传递给函数,并且函数内部将有正则表达式替换。

【问题讨论】:

这是实际的字符串:“E Graham St DDS ==> E Graham St”吗? 不,字符串只是 '===>' E Graham St DDS 之前的第一部分 【参考方案1】:

你可以使用类似的东西:

SQL> select regexp_replace(str, '^((.*? ave[ \.])|(.*? st[ \.])|(.*? rd[ \.])|(.*? close[ \.])).*$', '\1', 1, 1, 'i')
  2   from (select 'E Graham St       DDS' str from dual
  3         union all select 'Trent Ave      4DF' from dual
  4         union all select 'Foo bar Rd. asd' from dual
  5         union all select 'E Graham St St DDS' from dual);

REGEXP_REPLACE(STR,'^((.*?AVE[\.])|(.*?ST[\.])|(.*?RD[\.])|(.*?CLOSE[\.])).*$','
--------------------------------------------------------------------------------
E Graham St
Trent Ave
Foo bar Rd.
E Graham St

【讨论】:

那么W Mohave St DDS 呢? :-) @EgorSkriptunoff 啊,是的。添加了一个空格来处理部分单词被拾取 我还需要解决以下情况'E Graham St St DDS' @RajA 尝试修改后的版本。 ? 将其转换为非贪婪,因此它在第一场比赛中停止 非常感谢,我现在确实包含了这个。再次感谢..我还有一个场景。 'E Graham St Ave DDS' 应该变成 'E Graham St'

以上是关于RegExp_Replace Oracle 中某个单词列表之后的所有内容的主要内容,如果未能解决你的问题,请参考以下文章

Regexp_replace :从 Oracle 中的“+”分隔字符串中删除重复项 [重复]

如何在 edb 中使用相同的 REGEXP_REPLACE(Oracle sql)

如何通过 Oracle 中的 regexp_replace 从逗号分隔列表中删除重复项?

Regexp_Replace 在 Oracle 中多次出现具有相同替换次数的字符

如何通过 Oracle regexp_replace 从空格分隔列表中删除重复项? [复制]

在 oracle sql 中使用 regexp_replace 标准化地址