我对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)执行此操作的建议。
答案 0 :(得分:2)
匹配\|[^|]+\|[^|]+(\|[^|]+$)
重新$1
基本上,锚定到行尾,并删除列[-1]和[-2](我假设列不能为空。如果+
替换为*
,请将{{1}}替换为{{1}}他们可以)
如果您需要更精细的细节,我建议您编写Java或Python脚本来手动解析并为您重写文件。
答案 1 :(得分:1)
我已经抓获了三个小组,并给了他们名字。如果您使用sed
或vimregex
等替换实用程序,则可以无需替换remove
。或者,您可以使用编程语言连接keep_before
和keep_after
以获得所需的结果。
^(?<keep_before>(?:[^|]+\|){3})(?<remove>(?:[^|]+\|){2})(?<keep_after>.*)$
您可能必须删除群组内容并使用\1
等,具体取决于您使用的环境。
答案 2 :(得分:1)
从Notepad ++点击ctrl + h
,然后在对话框中输入以下内容:
找到:\|\d+\|\d+(\|[0-9a-z]+)$
替换为:$1
搜索模式:Regular Expression
点击替换并完成。
正则表达式解释:
\|\d+
:匹配以|开头的第一个字符串其次是数字
\|\d+
:匹配以|开头的第二个字符串其次是数字
(\|[0-9a-z]+)
:匹配并捕获第二个数字后的字符串。
$
:这将强制正则表达式搜索匹配字符串的结尾。
<强>替换强>
$1
:用我们在括号(\|[0-9a-z]+)