我有一个包含文本的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."
以上代表2个后续行.
我想选择每个第一个双引号“(起始行)和每个最后双引号”之间包含的所有文本作为分隔组
正如你所看到的那样,文本中有换行符,以及后续的双引号“”,它是我需要选择的文本的一部分.
我想出了类似的东西
(?s)(?!")[^\s](.+?)(?=")
但多个双引号打破了我想要的匹配
我是一个真正的新手正则表达式,所以我想也许我错过了一些非常基本的东西. Dunno如果相关,但我使用Sublime Text 3,所以应该是python我认为.
我能做些什么来实现我的需求?
最佳答案 您可以使用以下正则表达式:
"[^"]*(?:""[^"]*)*"
见demo
此正则表达式将匹配双引号内的非引号或2个后续双引号.
它是如何工作的?让我分享一下debuggex.com的图片:
使用正则表达式,我们匹配:
>“ – (1) – 字面引用
> [^“] * – (2,3) – 除引号以外的0个或更多字符(是的,包括换行符,这是negated character class),如果没有,则正则表达式搜索最终的文字引号(6 )
>(?:“”[^“] *)* – (4,5) – 0或更多序列:
>“” – (4) – 双倍双引号
> [^“] * – (5) – 除引号外的0个或更多字符
>“ – (6) – 最后的文字引用.
这比"(?:[^"]|"")*"
工作得更快(虽然产生相同的结果),因为前者的处理是线性的,涉及更少的回溯.