2014-04-21 71 views
7

我試圖從記事本+ +一個CSV文件中刪除雙引號內的逗號之間的逗號,這就是我:正則表達式來去除雙引號記事本+

1070,17,2,GN3-670,"COLLAR B, M STAY","2,606.45" 

,我需要這樣的:

1070,17,2,GN3-670,"COLLAR B M STAY","2606.45" 

我可以使用記事本查找/替換選項與reg exp。模式。 我嘗試了所有的組合,但沒有做到:(該文件包含100萬行。

整個今天我不再確定如果一個簡單的正則表達式可以做?也許我應該去一個腳本。 ?..python

+0

莫不是在雙引號之間多於一個逗號? – HamZa

回答

21

MRKI,這將做你想做的(以N測試++):

搜索:("[^",]+),([^"]+")

更換:$1$2\1\2

這是如何工作的?第一個圓括號將字符串的起始位置捕捉到(但不包括)逗號到組1中。第二個括號將逗號後面的字符串末尾捕獲到組2中。替換將字符串替換爲組1和第2組。

更詳細地說:在第一個圓括號中,我們匹配開頭的雙引號,然後是任何數量的非逗號的字符。這是[^,]+的含義。在第二個括號中,我們匹配任何數量的非雙引號的字符與[^"]+,然後結尾雙引號。

+0

@mrki FYI擴大瞭解釋,請讓我知道這是否適合您。 – zx81

+2

爲了更安全起見,我會使用'(「[^」,] +),([^「] *」)',因爲在**和**之後雙引號需要注意**逗號 –

+0

替換: $ 1 $ 2只是將「RING,R ALL(02U)」轉換爲$ 1 $ 2? – mrki

3

只需更新@ zx81的輝煌解決方案。 比方說你有報價

然後正則表達式搜索已經被修改之間2commas如下:

("[^",]+),([^",]+),([^"]+") 

更換需要被修改爲

$1$2$3 

所以它依賴於修改逗號。

我試圖探索,看看是否遞歸正則表達式是可能的,但似乎並不可能,截至目前

+0

舊帖子,但對於其他類似問題可能很有趣。看到alpha bravo的答案在這裏https://stackoverflow.com/questions/26664371/remove-more-than-one-comma-in-between-quotes-in-csv-file-using-regex?rq=1 – Tom

3

請嘗試以下

import re 

print re.sub(',(?=[^"]*"[^"]*(?:"[^"]*"[^"]*)*$)',"",string) 

這將刪除引號之間的逗號