【问题标题】:Regex: Replace every Comma with Tab Not within quotes正则表达式:用不在引号内的 Tab 替换每个逗号
【发布时间】:2016-01-29 10:30:56
【问题描述】:

我有大量这样的条目数据集:

(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\t$2\t$3\t$4
  • 冒犯逗号?无论如何,我已经测试了你的解决方案,但它没有成功
  • 尝试,(?=(?:[^'\n]*(?:'[^'\n]*'[^'\n]*)*)$) 并替换为\t

标签: regex excel tabs notepad++ comma


【解决方案1】:

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

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

编辑:

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

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

【讨论】:

  • @Baklap4 当然,我已经编辑解释了正则表达式的工作原理,并对其进行了一些润色。如果替换不清楚,请告诉我,我也会在那里提供一些信息。
猜你喜欢
  • 2011-09-17
  • 2017-01-05
  • 2021-11-10
  • 1970-01-01
  • 2019-11-08
  • 1970-01-01
  • 1970-01-01
  • 2016-11-13
  • 1970-01-01
相关资源
最近更新 更多