正则表达式在第二个逗号处拆分
Posted
技术标签:
【中文标题】正则表达式在第二个逗号处拆分【英文标题】:Regex split at second comma 【发布时间】:2016-09-14 14:01:20 【问题描述】:您好,我需要编写一个具有以下逻辑的正则表达式:
每隔一个逗号拆分一次,除非字符“\”在逗号之前。
也许可以举个例子来说明:
1,1a,2,2a,3,3a\,b,4,4a
应该得到结果:
1,1a
2,2a
3,3a\,b
4,4a
这是我的以下代码:
SELECT REGEXP_SUBSTR (text, '[^,]+,[^,]+', 1, LEVEL) TXT
FROM DUAL
CONNECT BY REGEXP_SUBSTR (text, '[^,]+,[^,]+', 1, LEVEL) IS NOT NULL;
所以我目前的正则表达式是:'[^,]+,[^,]+'
,每隔一个逗号就拆分一次。
【问题讨论】:
我刚刚运行了您的查询,对我来说看起来不错.. 有什么问题?为什么3,3a\,b
需要 3 个逗号而不是 2 个?
看起来 \ 是 oracle 中的转义字符。您需要将您的字符串更改为1,1a,2,2a,3,3a\\,b,4,4a
@sagi 因为这也可以是像“Test\,Test2”这样的文本。所以如果一个\是逗号之前的字符,这个逗号应该被忽略。
【参考方案1】:
尝试(\\,|[^,])+
而不是普通的[^,]+
【讨论】:
感谢完美!我现在的正则表达式是:(\\,|[^,])+,(\\,|[^,])+
仅供参考 - @ZerOne 确保您始终使用逗号分隔集合,否则您将得到不正确的结果。即,如果您在两个 1 之间添加一个额外的逗号,则结果将是错误的。这可能不是问题,具体取决于您的数据在进入的过程中是如何被清理的。只是让您意识到可能的警告,因为通常用于解析列表的正则表达式格式 [^,]+
不处理 NULL 元素。请参阅***.com/a/31464699/2543416 了解更多信息。以上是关于正则表达式在第二个逗号处拆分的主要内容,如果未能解决你的问题,请参考以下文章