使用正则表达式拆分CSV

时间:2015-05-23 19:49:26

标签: regex csv split

我想要一个CSV解析器。但是,我想要以下内容:正则表达式必须检查,CSV以逗号,结尾(否则正则表达式不能将CSV视为有效)!如果CSV没问题,那么我将在,

之间提取文本

示例:

hello,world,end, //OK. CSV ends with ",". There are 3 matches: 'hello' 'world' 'end'

aa,bb,cc //NOT ok. CSV doesn't end with ",". No matches.

我向the regex suggested by @Denomales提问。如果CSV包含带引号的部分,则始终存在仅包含引号的匹配项。有可能避免它吗?

2 个答案:

答案 0 :(得分:0)

谈到regex suggested by @Denomales,我们可以做些什么。

为确保我们只在最后匹配字符串和逗号,您可以在模式的开头添加一个正面的预测(在下面标有^):

(?=.*,$)(?:^|,)"?((?(1)[^"]*|[^,"]*))"?(?=,|$)
^^^^^^^^       | 

如果您不想捕获条目分隔标记(引号),则可以删除(?=[^"]|(")?)预测(上面标有|)。

请参阅demo

<强>更新

我看到你已经发布了上述线程的2个答案。您的正则表达式几乎就是您所需要的,只需添加前瞻和跳过转义实体的方法:

(?=.*,$)(?:"((?:\\.|[^"])*)"|([^,]*))(?:[,])

请参阅Demo 2

答案 1 :(得分:0)

Thanx @stribizhev,它完美无缺。
如果我理解正确,逗号也可以逃脱:
res
仅为了完整性: - )