gpt4 book ai didi

sql - REGEXP Oracle 的几个 not 语句

转载 作者:行者123 更新时间:2023-12-02 00:54:47 25 4
gpt4 key购买 nike

我有一个由逗号分隔的 4 个名称的字符串。 4 个名称中的 3 个在内部有严格的标识符,最后一个没有标识符。字符串中名称的顺序是随机的。如何使用 oracle REGEXP 获取没有标识符的名称?

示例字符串:'a.姓名 1,b。姓名 2、姓名 3、c-f 姓名 4'

严格标识符是'a.''b.''c-f'

name1, name2 and name4 我可以这样获取:

select 
regexp_substr('a. Name1, b. Name2, Name3, c-f Name4','(^|, )a.[^,]+($|,)') as name1,
regexp_substr('a. Name1, b. Name2, Name3, c-f Name4','(^|, )b.[^,]+($|,)') as name2,
regexp_substr('a. Name1, b. Name2, Name3, c-f Name4','(^|, )c\-f[^,]+($|,)') as name4
from dual

我想使用类似这样的方法获取 name3:

'(^|, )((NOT("a."))and(NOT("b."))and(NOT("c-f")))([^,]+($|,)'

但是我不知道如何用 REGEXP 来做。在 Oracle 中可以吗?

最佳答案

这将匹配第三个反向引用(任何用方括号包围的模式)。

REGEXP_REPLACE(
yourStringColumn,
'a\. (.*), b\. (.*), (.*), c-f (.*)',
'\3'
)

我使用的模式中有 4 个反向引用,每个都是您要查找的名称。模式的其余部分(背面引用之外)是您描述的模式的固定部分。请记住转义句号,这样它就不会被视为通配符 ('\.')

编辑:

如果它们可以按任何顺序排列,我最好的尝试是在逗号(或字符串的开头/结尾)之间找到一个本身不包含逗号或空格(空格暗示有前缀)的项目

SELECT
regexp_replace(
'c-f Name1, Name2, b. Name3, a. Name4',
'(^|.+, )([^, ]+)($|, .+)',
'\2'
)
FROM
dual
;

关于sql - REGEXP Oracle 的几个 not 语句,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55091074/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com