包含多个双引号的 CSV 拆分正则表达式

Gru*_*ber 3 python regex csv double-quotes sublimetext3

我有一个包含文本的 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."
Run Code Online (Sandbox Code Playgroud)

上面代表 2 个后续行。

"我想选择每个第一个双引号(开始一行)和每个最后一个双引号之间包含的所有文本作为单独的组"

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

我想出了这样的东西

(?s)(?!")[^\s](.+?)(?=")
Run Code Online (Sandbox Code Playgroud)

但多个双引号破坏了我想要的匹配

我是正则表达式的真正新手,所以我想我可能错过了一些非常基本的东西。不知道是否相关,但我正在使用 Sublime Text 3,所以我认为应该是 python。

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

Wik*_*żew 5

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

"[^"]*(?:""[^"]*)*"
Run Code Online (Sandbox Code Playgroud)

查看演示

此正则表达式将匹配非引号或双引号内的 2 个后续双引号。

它是如何工作的?让我分享一张来自debuggex.com的图表:

在此输入图像描述

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

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

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