【问题标题】:Remove columns from CSV从 CSV 中删除列
【发布时间】:2017-08-17 20:19:10
【问题描述】:

我对 Notepad++ 正则表达式一无所知。

这是我的 CSV 中的数据:

6454345|User1-2ds3|62562012032|324|148|9c1fe63ccd3ab234892beaf71f022be2e06b6cd1
3305611|User2-42g563dgsdbf|22023001345|0|0|c36dedfa12634e33ca8bc0ef4703c92b73d9c433  
8749412|User3-9|xgs|f|98906504456|1534|51564|411b0fdf54fe29745897288c6ad699f7be30f389

如何使用正则表达式删除第 5 列和第 6 列?第 5 列和第 6 列中的数字长度可变。

另一个问题是用户行也可以包含一个 |,使情况更糟。

我可以使用宏来解决这个问题,但文件有几百万行。

这是我想要达到的最终结果:

6454345|User1-2ds3|62562012032|9c1fe63ccd3ab234892beaf71f022be2e06b6cd1
3305611|User2-42g563dgsdbf|22023001345|c36dedfa12634e33ca8bc0ef4703c92b73d9c433
8749412|User3-9|xgs|f|98906504456|411b0fdf54fe29745897288c6ad699f7be30f389

我愿意就如何使用其他程序、命令行实用程序(Linux 或 Windows)执行此操作提出建议。

【问题讨论】:

  • User1-2ds3变成User2-42g563dgsdbfUser2-9xg|s变成User2-9|xgs的逻辑是什么?
  • @trincot 错误地复制/粘贴并在之后编辑这些行。我现在已经修复了这个例子。
  • User row can also contain a | 是的,如果管道是分隔符,除非在字段中转义,否则无法与分隔符区分。这意味着,没有解决方案。对不起...
  • 这将是格式错误的 CSV,因为并非所有行都具有相同的列数。根据您将其加载到的内容,它可能有效,也可能无效。
  • use a Regex to remove the 5th and 6th column 但是您已经接受了一个面向 End 的解决方案...从末尾删除 |col|col|col`从头开始的第 5 和第 6 列

标签: regex database csv notepad++


【解决方案1】:

匹配\|[^|]+\|[^|]+(\|[^|]+$)

替换$1

基本上,锚定到行尾,并删除列 [-1] 和 [-2](我假设列不能为空。如果可以,请将 + 替换为 *

如果您需要更详细的信息,我建议您编写 Java 或 Python 脚本来手动解析和重写文件。

【讨论】:

  • @Austin_Anderson 实际上,在 Notepad++(至少我的版本)中,两种形式都可以工作。我更喜欢 $ 形式,因为它更标准。
  • 你知道吗,它有效!我上次检查时一定是在旧版本上测试过。
【解决方案2】:

我已经捕获了三个组并为它们命名。如果您使用 sedvimregex 之类的替换实用程序,则可以将 remove 替换为空。或者,您可以使用编程语言连接 keep_beforekeep_after 以获得所需的结果。

^(?<keep_before>(?:[^|]+\|){3})(?<remove>(?:[^|]+\|){2})(?<keep_after>.*)$

您可能必须删除组命名并改用\1 等,具体取决于您使用的环境。

Demo

【讨论】:

    【解决方案3】:

    在 Notepad++ 中点击ctrl + h,然后在对话框中输入以下内容:

    查找内容:\|\d+\|\d+(\|[0-9a-z]+)$

    替换为:$1

    搜索方式:Regular Expression

    点击替换并完成。

    正则表达式解释:

    \|\d+:匹配第一个以 | 开头的字符串后跟数字

    \|\d+ :匹配以 | 开头的第二个字符串后跟数字

    (\|[0-9a-z]+):匹配并捕获第二个数字之后的字符串。

    $ :这将强制正则表达式搜索匹配字符串的结尾。

    替换:

    $1 :将找到的字符串替换为我们在捕获的组之间拥有的任何内容,即我们在括号 (\|[0-9a-z]+) 之间拥有的任何内容

    【讨论】:

      猜你喜欢
      • 2021-08-06
      • 1970-01-01
      • 1970-01-01
      • 2021-11-11
      • 1970-01-01
      • 2013-03-12
      • 2021-07-16
      • 2015-09-28
      相关资源
      最近更新 更多