用于查找和替换字符串中用逗号分隔并用引号引起来的单引号的正则表达式

Regex to find and replace single quotation marks in strings separated by a comma and enclosed in quotes

我正在使用 Sublime Text 3,我有一个包含单引号的 CSV 文件:

输入:

"col1", "col2", "col3", "col4", "col5"
"Cakes", "5" Carrots", "Pineapples'", ""Eggs"", "Apple 5" and 10""
...

使用正则表达式我想 "neutralise" 但不删除不合适的单引号(例如 5" Carrots""Eggs"")和撇号(例如 Pineapples').

通过中和,我的意思是将 \" 放在每个 quotation/apostrophe 前面,所以输出是:

输出:

"col1", "col2", "col3", "col4", "col5"
"Cakes", "5\"" Carrots", "Pineapples\"'", "\""Eggs\""", "Apple 5\"" and 10\"""
...

目前进度: 我想我需要 2 件来解决这个难题。

首先,我可以使用正则表达式 (".*)(["])(.*") 自行查找和替换每个字段的引号 示例:

输入: "Hello 5" World" 查找: (".*)(["])(.*") 替换: \\"" 输出:"Hello 5\"" World"。要重现这一点,您需要在 sublime 查找和替换工具栏上选择正则表达式和换行选项。

其次,我可以使用正则表达式 ([^,\n]+) 在 csv 文件(在 Sublime 中打开)中找到每个字段。有关详细信息,请参阅 this 上一个问题。

问题是我如何使用这两种技术(或其他技术,如果需要)来找到一个正则表达式和一个正则表达式来替换每个带有单引号的字段(即在它前面加上 \").

如果您认为这不能通过 sublime 和正则表达式来完成,那么如果您能建议一种方法来做到这一点就太好了。

更多详情: 为了绝对清楚,解决方案应包含一个正则表达式,用于查找 CSV 文件(在 sublime 中打开)中具有单引号的每个字段。然后应该有一个正则表达式,在每个引号之前插入字符串 \".

我将执行三个步骤来解决您的问题:

  1. 执行此 find/replace regex 为文本组创建障碍

"([\S\h]*?)"((?:,|\h*$)) 替换为 [<][>]

  1. 然后用这个 find/replace regex
  2. 找到你讨厌的双引号

"|(?=') 替换为 \"

  1. 然后,最后,用这个 regex
  2. 将你的障碍恢复到原来的位置

\[[<>]\] 替换为 "

编辑:

我刚刚更新了第 2 步。我认为我正确地理解了您的问题。如果不是,请解释原因,我会相应地调整正则表达式。