【发布时间】:2021-05-26 04:09:57
【问题描述】:
我遇到了一些我认为很简单的问题,但我终其一生都无法解决。我正在尝试用空格替换所有 except 指定字符串。
我可以删除字符串(见下文),但无法“反转”操作。
with text as (
select 'Cat dog sheep /* 67 = 123 + monkey12 abcd and then a fish B1234.CAT_DOG_MOUSE and half a loaf of bread /* ON INNER JOIN B3456.BIRD_SHOE 11' as jibberish)
select regexp_replace(jibberish, '(B)[[:digit:]]{4}[.][[:alnum:]_]+', ' ') as new_text from text;
'Cat dog sheep /* 67 = 123 + monkey12 abcd and then a fish and half a loaf of bread /* ON INNER JOIN 11'
我尝试过各种事情,例如 '[^(B)[[:digit:]]{4}[.][[:alnum:]_]+]*' 以及我尝试过的各种其他事情在这里找到,但它们似乎都不起作用。 这是在 Oracle 中使用正则表达式的一个怪癖吗?
澄清一下,在运行代码后,我想要一些看起来像这样的东西:
' B1234.CAT_DOG_MOUSE B3456.BIRD_SHOE '
任何帮助将不胜感激。
谢谢!
【问题讨论】:
-
那么,您替换匹配项并期望它们保留在输出中?这是不可能的。提取或匹配除您的模式匹配之外的所有内容。
-
在正则表达式中使用捕获组,在替换字符串中使用反向引用。查看示例here
-
首先,这不是一个有效的查询。
-
试试
regexp_replace(jibberish, '(B\d{4}\.\w+)?.', '\1 ') -
@BarbarosÖzhan '来自双重'
标签: sql regex oracle regexp-replace