我有一个包含文本的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."
上面表示两个后续行。在
{{1>在第一行和第二行之间选择一个分隔的文本{cd1>
如您所见,文本中有换行符,以及随后的转义双引号""
,它们是我需要选择的文本的一部分。在
我想出了这样的办法
^{pr2}$但多个双引号破坏了我想要的匹配
我是一个真正的regex新手,所以我想我可能遗漏了一些非常基本的东西。不知道如果相关,但我使用崇高的文本3,所以应该是python我认为。在
我能做些什么来达到我所需要的?在
如果使用的是python,那么就不需要regex,可以直接使用标准的csv library,单行内的双双引号将自动处理。示例(对于您在
a.csv
中发布的csv)-这是由
csv
模块正确处理的,基本上是因为"
是默认的quotechar,所以两个"
内的任何内容都被视为该列的一部分,即使它的\n
或空格等另外,} 的参数-
csv
模块还有另一个名为^{可以使用以下正则表达式:
见demo
此正则表达式将匹配非引号或双引号内的两个后续双引号。在
它是如何工作的?让我分享来自debuggex.com的图形:
对于regex,我们匹配:
"
-(1)-字面意思的引用[^"]*
-(2,3)-0个或多个引号以外的字符(是的,包括换行符,这是一个negated character class),如果没有,则regex将搜索最后的文本引号(6)(?:""[^"]*)*
-(4,5)-0或更多序列:""
-(4)-双双引号[^"]*
-(5)-0个或多个字符,而不是引号"
-(6)-最后的字面引号。在这比^{} 更快(尽管产生相同的结果),因为前者的处理是线性的,涉及更少的回溯。在
相关问题 更多 >
编程相关推荐