2016-02-14 64 views
1

這與在其他地方解析文件之前清理文件有關,即格式不正確/醜陋的CSV。我看到大量的例子來刪除/匹配某些字符串/字符/分隔符之間的所有字符,但我找不到任何特定的字符串。線的實施例部分將看起來像這樣:正則表達式 - 如何刪除字符串/分隔符之間的特定字符?

","Should now be allowed by rule above "Server - Access" added by Rich"\r 

需要明確的是,這不是整條線,但整個線被封閉在引號和由「」分隔和在^ M(視窗換行符結束/回車)。在這之前的'列'將在每邊被「,」包圍。我可能也會使用這個來刪除出現在前面的cruft。

我想要去除「,」和「\ r(」服務器 - 訪問「 - 這些之間的所有雙引號)而不刪除分隔符。或者,我可能會找到並替換它們用\「來爲Ruby CSV庫分隔它們。到目前爲止,我有這樣的:

(?<=",").*?(?="\\r) 

這基本上匹配分隔符之間的所有內容。如果我替換。*?與任何事情,是一封信,雙引號等,我得到零比賽。我究竟做錯了什麼?

注意:這應該是Ruby兼容請。

+0

更換裏面的比賽一個塊。 –

+0

這不是一個可以用一個正則表達式完成的事情。您必須檢查下一行的起始位置,然後確定該行是否正確開始,或者是否是嵌入行尾的結果。如果這是因爲嵌入式行結束,那麼您將需要適當地加入行。這不是一個簡單的問題。 –

回答

0

如果我理解正確的話,你可以使用negative lookahead and lookbehind

text = '","Should now be allowed by rule above "Server - Access" added by Rich"\r' 
puts text.gsub(/(?<!,)"(?![,\\r])/, '\"') 
# ","Should now be allowed by rule above \"Server - Access\" added by Rich"\r 

當然,這是不行的,如果值本身可以包含昏迷和新線...

+0

這就是爲什麼我需要分隔符爲「,」,然後是「\ r(包含雙引號),而不僅僅是逗號或\ r。這樣我知道我不會在列中產生任何內容。爲了確保CSV庫能夠正確輸出, – hatlord

+0

我的意思是,如果一個逗號可以成爲字符串的一部分,那麼就沒有真正的保證你不會有'', '作爲你的字符串的一部分,以及... –

+0

啊,我得到你,說實話,這是一場持續的戰鬥,但如果我能解析80%的這些文件,這對我的團隊來說是一個巨大的減少。這將永遠不需要面向客戶的100%。我會給你的解決方案進行測試運行。謝謝! – hatlord

相關問題