Oracle:正则表达式替换模式上的多个替换

Posted

技术标签:

【中文标题】Oracle:正则表达式替换模式上的多个替换【英文标题】:Oracle: Regex replace for multiple replacements on a pattern 【发布时间】:2017-08-08 10:49:46 【问题描述】:

我正在尝试找到解决方案,但不知何故我得到了错误的输出(参考了一些在线解决方案并让自己感到困惑:()。请告知我哪里出错了。

var := 'test_1_file1.extn1 test_1_file2.extn2'
select regexp_replace(var,'(test_1*.).*$','\2') from dual;

预期输出:应该在 .operator 之前删除所有内容

extn1 extn2

【问题讨论】:

\2 表示搜索模式中第二组括号中的子模式。您的搜索模式中只有一组括号,因此这是行不通的。那你说之前的一切。必须去,但在你的例子中,你搜索特定的文本。哪个是对的?不可能两者兼而有之。另请注意,句点是正则表达式中的元字符,如果您搜索句点,则必须对其进行转义。 哦,非常感谢您的提示。我是新手,我知道我一定做错了。正如我在预期输出中所说的那样,这是正确的,我所期待的,我尝试过的可能绝对是你所说的错误 【参考方案1】:

试试这个:

SELECT
  regexp_replace( var, '([^ ]*\.)', '' ) replaced
FROM dual;

如果单词必须以 test_1 开头:

SELECT
  regexp_replace( var, '(test_1[^ ]*\.)', '' ) replaced
FROM dual;

【讨论】:

太棒了!!正是我想要的,它有效 :) 非常感谢 @KarthikeyanChidambaram - 很高兴我能帮上忙。

以上是关于Oracle:正则表达式替换模式上的多个替换的主要内容,如果未能解决你的问题,请参考以下文章

用不同的替换替换多个正则表达式匹配

Oracle - 用正则表达式列表替换记录的子字符串

组合多个正则表达式替换

利用notepad++正则表达式将 多个空格 替换为一个逗号

利用notepad++正则表达式将 多个空格 替换为一个逗号

字符串匹配正则表达式模式并替换为匹配的问题