【发布时间】:2016-03-03 13:28:14
【问题描述】:
我正在使用 Sublime Text 3,并且我有一个包含单引号的 CSV 文件:
输入:
"col1", "col2", "col3", "col4", "col5"
"Cakes", "5" Carrots", "Pineapples'", ""Eggs"", "Apple 5" and 10""
...
使用正则表达式我想“中和”但不删除不合适的单引号(例如5" Carrots、""Eggs"")和撇号(例如Pineapples')。
通过中和我的具体意思是在每个单引号/撇号前面放置\",因此输出是:
输出:
"col1", "col2", "col3", "col4", "col5"
"Cakes", "5\"" Carrots", "Pineapples\"'", "\""Eggs\""", "Apple 5\"" and 10\"""
...
目前的进展: 我想我需要 2 件来解决这个难题。
首先,我可以使用正则表达式 (".*)(["])(.*") 自行查找和替换每个字段的引号
示例:
输入: "Hello 5" World" 查找: (".*)(["])(.*") 替换: \1\\\""\3
输出: "Hello 5\"" World"。要重现这一点,您需要在崇高的查找和替换工具栏上选择正则表达式和换行选项。
其次,我可以使用正则表达式 ([^,\n]+) 在 csv 文件(在 Sublime 中打开)中找到每个字段。有关详细信息,请参阅 this 上一个问题。
问题是我如何使用这两种技术(或其他技术,如果需要)来获取一个正则表达式来查找和一个正则表达式来替换每个具有单引号的字段(即在它前面加上\")。
如果您认为这不能通过 sublime 和正则表达式来完成,那么如果您能提出一种方法来做到这一点,那就太好了。
更多详情:
为了绝对清楚,一个解决方案应该包含一个正则表达式,它可以找到 CSV 文件(在 sublime 中打开)中包含一个单引号的每个字段。然后应该有一个正则表达式,在每个引号之前插入字符串 \"。
【问题讨论】:
-
我认为如果这个
"5" Carrots"是一个有效字段,那么引号内不能有逗号对吗?否则可能是",5," Carrots",使逗号成为唯一有效的分隔符。 -
@sln 有一个很好的观点。
",5","Something"是否有效?注意第一组中的命令,在5之前。 -
@Erutan409 是的,
",5","Something"将是一个有效字段。但是逗号不需要被“处理”(有\")放在它前面。
标签: regex perl csv replace sublimetext3