正则表达式:用不在引号内的制表符替换每个逗号

Regex: Replace every Comma with Tab Not within quotes

我有一个庞大的条目数据集,如下所示:

(21, 2, '23.5R25 ETADT', 'description, with a comma'),
(22, 1, '26.5R25 ETADT', 'Description without a comma'),
(23, 5, '20.5R20.5', 'Another description with ; semicolumn'),

我正在尝试用制表符替换列表中的每个逗号。排除单引号内的逗号。也不包括结尾逗号。

所以示例条目应该变成:

(21[TAB]2[TAB]'23.5R25 ETADT'[TAB]'description, with a comma'),
(22[TAB]1[TAB]'26.5R25 ETADT'[TAB]'Description without a comma'),
(23[TAB]5[TAB]'20.5R20.5'[TAB]'Another description with ; semicolumn'),

我有大约 6000 行这样的数据。 这些选项卡允许我告诉 Excel 将这些条目的元素导入不同的列。

我试过的正则表达式是这样的:[ ]*,[ ]* 但是这个正则表达式选择了所有逗号,甚至是单引号内的逗号。

看起来你的每行括号内都有 4 个元素。而且看起来只有最后 2 个元素使用单引号。如果可以做出这些假设,我已经在 Notepad++ 中测试了以下内容:

  • "Find what :" ^\(([^,]*),\s*([^,]*),\s*'([^']*)'\s*,\s*
  • "Replace with :" \(\t\t''\t

编辑:

搜索正则表达式依赖于 4 列模型,只有最后两个元素有单引号。视觉上这是它的工作原理:

  1. ^\(:查找左括号
  2. ([^,]*):捕获所有元素 1
  3. 的非逗号字符
  4. ,\s*:匹配逗号和任何尾随空格
  5. ([^,]*):捕获非逗号字符,这将是元素 2
  6. 的全部
  7. ,\s*:匹配逗号和任何尾随空格
  8. '([^']*)':捕获单引号中的字符串,这将是所有元素 3
  9. \s*,\s*:匹配一个逗号及其周围的所有空格
  10. 忽略字符串的其余部分,没有更多的逗号要替换我们只想替换我们刚刚读入的行的一部分