CSV拆分的正则表达式,包括多个双引号 [英] Regex for CSV split including multiple double quotes

查看:29
本文介绍了CSV拆分的正则表达式,包括多个双引号的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有一个包含文本的CSV列数据。每行用双引号分隔"

一行中的示例文本类似于此(注意:换行符和每行前的空格用于)

"Lorem ipsum dolor sit amet, 
 consectetur adipisicing elit, sed do eiusmod
 tempor incididunt ut labore et dolore magna 
 aliqua. Ut ""enim ad"" minim veniam,
 quis nostrud exercitation ullamco laboris nisi 
 ut aliquip ex ea commodo
 consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse
 cillum dolore eu fugiat ""nulla pariatu"""
"ex ea commodo
 consequat. Duis aute irure ""dolor in"" reprehenderit 
 in voluptate velit esse
 cillum dolore eu fugiat nulla pariatur. 
 Excepteur sint occaecat cupidatat non
 proident, sunt in culpa qui officia deserunt 
 mollit anim id est laborum."

以上代表两个后续行。

我要将第一个双引号"(开始一行)和最后一个双引号"

之间包含的所有文本作为单独的组进行选择

如您所见,文本中有换行符,以及随后的转义双引号"",它们是我需要选择的文本的一部分。

我想出了这样的东西

(?s)(?!")[^s](.+?)(?=")

但多个双引号打断了我想要的匹配

我是regex的新手,所以我想我可能遗漏了一些非常基本的东西。不知道是否相关,但我使用的是Sublime Text 3,所以我认为应该是Python。

我可以做些什么来实现我需要的?

推荐答案

您可以使用以下正则表达式:

"[^"]*(?:""[^"]*)*"

参见demo

此正则表达式将匹配不带引号的双引号或双引号内的两个后续双引号。

它是如何工作的?让我分享debuggex.com中的图形:

使用正则表达式,我们匹配:

  • "-(1)-字面引号
  • [^"]*-(2,3)-0个或更多除引号以外的字符(是的,包括换行符,这是negated character class),如果没有,则正则表达式搜索最后的文字引号(6)
  • (?:""[^"]*)*-(4,5)-0或更多序列:
    • ""-(4)-双引号
    • [^"]*-(5)-0个或更多字符,不包括引号
  • "-(6)-最后一个原文引号。

这比"(?:[^"]|"")*"更快(尽管产生相同的结果),因为前者的处理是线性的,涉及的回溯要少得多。

这篇关于CSV拆分的正则表达式,包括多个双引号的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆