我有一个包含文本的 CSV 列数据。每行用双引号分隔"
一行中的示例文本类似于此(notice: 新行和每行之前的空格是故意的)
"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](.+?)(?=")
但多个双引号破坏了我想要的匹配
我是正则表达式的真正新手,所以我想我可能错过了一些非常基本的东西。不知道是否相关,但我正在使用 Sublime Text 3,所以我认为应该是 python。
我可以做什么来实现我所需要的?
您可以使用以下正则表达式:
"[^"]*(?:""[^"]*)*"
See demo https://regex101.com/r/nO1wB6/2
此正则表达式将匹配非引号或双引号内的 2 个后续双引号。
它是如何工作的?让我分享一个图形debuggex.com https://www.debuggex.com/r/VMpVzFMT_JuSSV19:
使用正则表达式,我们匹配:
-
"
- (1) - 字面引用
-
[^"]*
- (2, 3) - 除引号外的 0 个或更多字符(是的,包括换行符,这是一个否定字符类 http://www.regular-expressions.info/charclass.html#negated),如果没有,则正则表达式搜索最终的文字引用 (6)
-
(?:""[^"]*)*
- (4,5) - 0 or more sequences of:
-
""
- (4) - 双双引号
-
[^"]*
- (5) - 除引号外的 0 个或多个字符
-
"
- (6) - 最后的文字引用。
这比"(?:[^"]|"")*" https://regex101.com/r/nO1wB6/4(尽管产生相同的结果),因为前者的处理是线性的,涉及更少的回溯。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)