正则表达式:用标签替换每个逗号不在引号

时间:2015-10-29 10:22:10

标签: regex excel tabs notepad++ comma

我有大量的条目数据集如下:

  

(21,2,'23 .5R25 ETADT','描述,带逗号'),
  (22,1,'26 .5R25 ETADT','没有逗号的描述'),
  (23,5,'20 .5R20.5','另一个描述;半圆'),

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

所以示例条目应该成为:

  

(21 [TAB] 2 [TAB] '23 .5R25 ETADT'[TAB]'描述,带逗号'),
  (22 [TAB] 1 [TAB] '26 .5R25 ETADT'[TAB]'没有逗号的说明'),
  (23 [TAB] 5 [TAB] '20 .5R20.5'[TAB]'另一种描述;半圆'),

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

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

1 个答案:

答案 0 :(得分:2)

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

  • “查找内容:”^\(([^,]*),\s*([^,]*),\s*'([^']*)'\s*,\s*
  • “替换为:”\(\1\t\2\t'\3'\t

修改

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

Regular expression visualization

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