使用 Oracle regexp_replace 捕获多个字符串或单词

Using Oracle regexp_replace to capture multiple strings or words

我有一行这样的数据。

年龄:32,name:Michael 约翰,country:USA,age:34,name:Lewis 卡尔,country:USA,age:53, name:Larry 摩尔, country:Mexico

我想从上面的行中捕获所有的名字。

预期输出:-

迈克尔·约翰、刘易斯·卡尔、拉里·摩尔

我怎样才能做到这一点?

请注意,我显示了 3 个数据集,但数据集是动态的,可以超过 3 个。因此预期的名单可以超过 3 个。

我试过这种方法

select regexp_replace(s1,'(名称:\w+(+\w+)*)','<\1>') 从 ( select 'age:32, name:Michael John, country:USA, age:34, name:Lewis Carl, country:USA, age:53, name:Larry Moore, country:Mexico' 来自双重的 s1 ) ;

这是输出

年龄:32,,country:USA,age:34,,country:USA, age:53, , country:Mexico

但我不知道如何删除我想省略的“年龄”和“国家/地区”。

请指教

SELECT RTRIM( REGEXP_REPLACE( value, '\s*(name:([^,]+,?)|[^,]+,?)', '' ), ',' ) AS names
FROM   table_name;

其中,对于示例数据:

CREATE TABLE table_name ( value ) AS
SELECT 'age:32, name:Michael John, country:USA, age:34, name:Lewis Carl, country:USA, age:53, name:Larry Moore, country:Mexico'
FROM   DUAL;

输出:

| NAMES                               |
| :---------------------------------- |
| Michael John,Lewis Carl,Larry Moore |

db<>fiddle here