我正在尝试从逗号分隔列表中返回字符串列表。但是,我仍然希望在字符串中返回逗号,它们出现在双引号之间。
这是我目前的陈述:
SELECT
regexp_substr('one,two,"three, four five",six,"seven, eight, nine"',
'(.*?,){'||(n-1)||'}([^,]*)', 1, 1, '', 2) token
FROM (SELECT LEVEL n FROM dual CONNECT BY LEVEL <= 10);
返回:
one
two
"three
four five"
six
"seven
eight
nine"
但是我需要回复:
one
two
three, four, five
six
seven, eight, nine
我的正则表达生锈了。是否有一种干净的方法来修改我的正则表达式来实现这个目标?
谢谢!
答案 0 :(得分:2)
试试这个:
'^("[^"]*",|[^",]*,){'||(n-1)||'}("[^"]*"|[^",]*)', 1, 1, '', 2
或更简单的版本:
'(^|,)("[^"]*"|[^",]*)', 1, n, '', 2
或者如果不需要引号 - 将其包装成:
regexp_replace( ..., '"', '')