有一个带有虚线的 CSV。它有三个问题。
- 在行首,而不是两个引号,一个。
- 最后,不是 2 个引号,而是三个
- 在第一个字段中,而不是 "","" -> ,""
import re
item = '"last_name,""first_name"",""middle_name"",""birthday"",""passport_series"",""passport_number"",""mfo_name"",""created_at"",""status"""'
regex = re.compile('[^"],""')
item = item.replace('"""', '""')
tmp = regex.sub('"",""', item)
现在 'e' 在 'last_name' 中被吃掉了 帮助一个正则表达式,它不会吃掉第一列 ,"" 之前的字符。
首先完全删除所有引号,然后将它们放在需要它们的地方要容易得多:
获取列表:
将表达式更改为
查看表达式如何工作的示例
模式
(?<!")是一个向后看的块,它检查字符串中当前位置之前是否有双引号字符,如果是,则不匹配,否则允许匹配表达式中的后续模式。相反
item.replace('"""', '""'),您可以简单地用 删除字符串开头和结尾的所有引号.strip('"'),然后在替换后用正则表达式添加它们。请参阅Python 代码示例: