如何仅替换 Oracle 中文本的某些部分?

Posted

技术标签:

【中文标题】如何仅替换 Oracle 中文本的某些部分?【英文标题】:How to replace only certain part of the text in Oracle? 【发布时间】:2020-01-27 09:43:33 【问题描述】:

我正在尝试替换文本中的某些单词。但是,如果它是 url 的一部分,则不希望该词被替换。例如:技术一词。它在两个地方都被替换了(包括 url)。

select regexp_replace('Part of the Technical Network Group https://technical.com/sites/',
                      'technical','tech',1,0,'i')
  from dual

输出:

Part of the tech Network Group https://tech.com/sites/

预期输出:

Part of the tech Network Group https://technical.com/sites/

【问题讨论】:

【参考方案1】:

此方法使用一个 regexp_replace() 调用。仅当它前面是行首或空格时,它才匹配单词“技术”(不区分大小写),并保存前面的字符。它被保存的字符(由'\1' 引用)替换,后跟“tech”。

with tbl(str) as (
  select 'Technical Part of the Technical Network Group https://technical.com/sites/' from dual
)
select regexp_replace(str, '(^| )technical', '\1tech', 1, 0, 'i') fixed
from tbl;

FIXED                                                           
----------------------------------------------------------------
tech Part of the tech Network Group https://technical.com/sites/

【讨论】:

【参考方案2】:

分两步完成。

首先,如果单词出现在单词之间,其次如果单词是句子的第一个单词。

select 
      regexp_replace(regexp_replace('technical Part of Technical Group https://technical.com/sites/',
                     ' technical', 
                     ' tech',1,0,'i'), 'technical ', 'tech ',1,0,'i') 
  from dual

希望这能解决您的问题。

【讨论】:

如果我们在文本的开头有单词呢?它不会取代它,因为它前面没有空格。 这是你的答案。我暂时把这个词改成了***,然后又变回原来的样子。请参阅上面的答案。 上面的查询给出Part of tech Group https:technical.com/sites/作为结果(i.e..https后没有斜杠 这是一个陷阱。感谢您指出@BarbarosÖzhan。我已经更新了答案。 @BarbarosÖzhan 我们需要 2. 如果技术是字符串的第一个单词怎么办?见link

以上是关于如何仅替换 Oracle 中文本的某些部分?的主要内容,如果未能解决你的问题,请参考以下文章

使用 oracle regexp_replace 替换代码的某些部分

oracle中,如何批量替换某字段的部分值,该字段其他部分保持不变?

在 TextView 中仅隐藏部分文本

如何聚焦光线或如何仅在 pygame 中绘制窗口的某些圆形部分?

如何仅提取文章正文的某些部分?

Oracle sql:仅获取子字符串的特定部分