Regex for CSV split including multiple double quotes(CSV拆分的正则表达式,包括多个双引号)
本文介绍了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拆分的正则表达式,包括多个双引号的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!
编程基础网
本文标题为:CSV拆分的正则表达式,包括多个双引号
基础教程推荐
猜你喜欢
- 用 Python 编写 Fortran 无格式文件 2022-01-01
- 将 x 轴刻度更改为自定义字符串 2022-01-01
- numpy float:比算术运算中内置的慢 10 倍? 2022-01-01
- pyserial - 可以从线程 a 写入串行端口,是否阻塞从线程 b 读取? 2022-01-01
- 尝试制作WhatsApp机器人 2022-01-01
- 与常规 dict 相比,Python manager.dict() 非常慢 2022-01-01
- Discord.py 缺少必需的参数 2022-01-01
- 由Python将MP3转换为MIDI(类型错误:无法加载插件:mtg-Melodia:Melodia) 2022-01-01
- 使用生成器和迭代器时 Python 多循环失败 2022-01-01
- 在 Celery 工作人员中捕获 Heroku SIGTERM 以优雅地关 2022-01-01
