从CSV中删除列

时间:2017-08-17 20:19:11

标签: regex database csv notepad++

我对Notepad ++ Regex一无所知。

这是我在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)执行此操作的建议。

3 个答案:

答案 0 :(得分:2)

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

重新$1

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

如果您需要更精细的细节,我建议您编写Java或Python脚本来手动解析并为您重写文件。

答案 1 :(得分:1)

我已经抓获了三个小组,并给了他们名字。如果您使用sedvimregex等替换实用程序,则可以无需替换remove。或者,您可以使用编程语言连接keep_beforekeep_after以获得所需的结果。

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

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

Demo

答案 2 :(得分:1)

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

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

替换为:$1

搜索模式:Regular Expression

点击替换并完成。

正则表达式解释:

\|\d+:匹配以|开头的第一个字符串其次是数字

\|\d+:匹配以|开头的第二个字符串其次是数字

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

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

<强>替换

$1:用我们在括号(\|[0-9a-z]+)