正则表达式在第二个逗号处拆分

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 了解更多信息。

以上是关于正则表达式在第二个逗号处拆分的主要内容,如果未能解决你的问题,请参考以下文章

我想使用字符串中的正则表达式函数在第二个点(。)之前提取文本,例如:

正则表达式基于空格引号和括号进行拆分

正则表达式拆分逗号前面没有特定单词

用于拆分包含逗号的字符串的正则表达式

逗号和双引号CSV格式的正则表达式拆分[重复]

C# 正则表达式拆分引号和逗号语法错误 [重复]