使用 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
我有一行这样的数据。
年龄: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,
但我不知道如何删除我想省略的“年龄”和“国家/地区”。
请指教
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