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

Posted

技术标签:

【中文标题】正则表达式拆分逗号前面没有特定单词【英文标题】:Regex split on comma that isn't preceded by a specific word 【发布时间】:2021-11-22 11:43:27 【问题描述】:

我有一个 CSV 字符串,我想用逗号分隔,但前提是逗号前面没有特定单词字符串中的其他位置

以下是输入示例。

1,2,3,Test Message,JSON= "book":  "title": "Hello, there, world"  

在上述情况下,单词 'JSON=' 之后的任何逗号都不应导致字符串拆分,因此我希望进行以下拆分。

1
2
3
Test Message
JSON= "book":  "title": "Hello, there, world"  

理想情况下,我想使用Regex.Split 来拆分字符串,我认为我需要在后面使用否定的外观,但我不确定实现这一点所需的语法。

任何帮助将不胜感激。

【问题讨论】:

假设停用词部分位于末尾,然后拆分前面部分,则可能更容易匹配停用词的部分。 在一般情况下,CSV 解析需要对带引号的字符串进行状态处理。你不能只扔Split(),甚至不能使用正则表达式Split() 另请注意,虽然此数据是有效的 CSV,但它不是 JSON 的有效 CSV 编码。正确的 CSV 解析将消耗在输出中不留任何引号供 JSON 解析器查找。 【参考方案1】:

您可以使用下面的正则表达式来解析提到的 CSV 中的 JSON here

C#代码-

var csvContent = "1,2,3,Test Message,JSON= \"book\":  \"title\": \"Hello, there, world\"  ";
var split = Regex.Split(csvContent, ",(?=(?:[^\"]*\"[^\"]*\")*[^\"]*$)");

JS 演示 -

const csv = '1,2,3,Test Message,JSON= "book":  "title": "Hello, there, world"  ';

console.log(csv.split(/,(?=(?:[^\"]*\"[^\"]*\")*[^\"]*$)/));

【讨论】:

以上是关于正则表达式拆分逗号前面没有特定单词的主要内容,如果未能解决你的问题,请参考以下文章

正则表达式匹配在任意位置连字符并分成两行的特定单词

使用正则表达式匹配多个逗号分隔的单词

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

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

没有特定单词的行匹配的正则表达式

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