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

标签 excel regex csv notepad++

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

(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 个元素。看起来只有最后两个元素使用单引号。如果可以做出这些假设,我已经在 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. 忽略字符串的其余部分,没有更多的逗号需要替换,我们只想替换刚刚读入的行的部分内容

关于excel - 正则表达式:用制表符替换每个逗号不在引号内,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33411578/

相关文章:

python - 简化正则表达式

javascript - CoffeeScript 基于两个条件的分割函数

Python 正则表达式 MULTILINE 找不到任何东西

python - Pandas Python read_csv error_bad_lines 产生 shell 反馈

excel - 有没有办法限制使用 VBA 删除工作表中的行?

excel - 减少字符串并保持零完整

html - 使用 VBA 动态创建 HTML 表格行

excel - 匹配功能不适用于 2 个相同的数字

Python:有条件地比较 CSV 行值

r - R 中的 write.csv 将我的日期转换为 10 位整数