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

时间:2015-11-30 00:06:21

标签: regex perl csv replace sublimetext3

我使用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"。要重现这一点,您需要在sublime查找和替换工具栏上选择正则表达式和换行选项。

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

问题是如何使用这两种技术(或其他如果需要)来获取正则表达式以及正则表达式来替换具有单引号的每个字段(即在\"之前)

如果你不认为这可以通过崇高和正则表达来完成,那么如果你能提出一种方法来做这件事就会很棒。

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

1 个答案:

答案 0 :(得分:0)

我会在解决问题时执行三个步骤:

  1. 执行此查找/替换regex以为文本组创建障碍
  2. "([\S\h]*?)"((?:,|\h*$))替换为[<]$1[>]$2

    1. 然后使用此查找/替换regex
    2. 找到您的违规双引号

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

      1. 然后,最后,用regex
      2. 将障碍替换回原来的位置

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

        编辑:

        我刚刚更新了第2步。我想我正确地理解了你的问题。如果没有,请解释原因,我会相应地调整正则表达式。