2017-08-17 104 views
0

我對「記事本++正則表達式」一無所知。從CSV刪除列

這是我在我的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列?第五和第六列的數字是可變的。

另一個問題是用戶行也可能包含|,使其更糟糕。

我可以使用一個宏來解決這個問題,但是這個文件長達幾百萬行。

這是最後的結果,我想實現:

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

我打開了如何與其他程序,命令行實用程序爲此建議,Linux或Windows操作系統。

+1

通過其邏輯不'User1-2ds3'成爲'用戶2之間-42g563dgsdbf','User2-9xg | s'成爲'User2-9 | xgs'? – trincot

+0

@trincot之後嚴重地複製/粘貼和編輯行。我已經修復了這個例子。 – Dyon

+0

'用戶行也可以包含| 「是的,如果管道是分隔符,除非它在現場逃跑,否則它不能與分隔符區分。這意味着,_no solution_。對不起...... – sln

回答

3

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

Repalce $1

基本上,錨到行的結束,並刪除列[-1]和[-2](I假設列不能爲空。替換+*如果他們可以)

如果您需要更好的細節那麼,我建議編寫一個Java或Python腳本手動分析併爲您重寫文件。

+0

請注意,記事本++替換'\ 1'不是'$ 1' –

+1

@Austin_Anderson其實,在記事本+ + +(至少我的版本)都形成工作。我更喜歡$表格,因爲它更標準。 – Tezra

+0

你知道什麼,它的作品!我必須在最後一次檢查時對舊版本進行測試。 –

1

我已經捕獲了三組並給出它們的名字。如果使用sedvimregex等替換實用程序,則可以不用任何東西來替換remove。或者,您可以使用編程語言連接keep_beforekeep_after以獲得所需的結果。

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

您可能需要刪除該組namings和使用\1等來代替,這取決於你用什麼樣的環境。

Demo

1

從記事本++打ctrl + h然後在對話框中輸入以下內容:

查找內容:$1

搜索模式:Regular Expression

點擊\|\d+\|\d+(\|[0-9a-z]+)$

與更換取代並完成。

正則表達式解釋:

\|\d+:匹配開頭1弦|後跟數字

\|\d+:匹配以第一個字符開頭的第二個字符串|其次是數字

(\|[0-9a-z]+):匹配並捕獲第二個數字後的字符串。

$:這將強制正則表達式搜索匹配字符串的末尾。

更換:

$1:替換找到的字符串,無論我們所拍攝的組之間有這一切,我們有括號(\|[0-9a-z]+)