2012-10-06 23 views
-8

我需要在C#中的正則表達式表達式,它可以刪除任何數量的雙引號進入我的字符串,這是一個csv文件,從StreamReader中讀取後,我想要替換所有在我的字符串中出現的雙引號。第一行是標題,第二行是數據。對於前:在C#中的正則表達式#

"E-mail","First Name","Last Name","Company" 
"[email protected]","sanjay","sen","this is my "test" company" 

所以理想的正則表達式應該給下面的輸出:

"E-mail","First Name","Last Name","Company" 
"[email protected]","sanjay","sen","this is my test company " 

所以雙引號從"this is my "test" company"柱和生成物中去除成"this is my test company"

+2

你甚至嘗試? – Luka

+0

您確實收到了無引號引號的無效CSV文件嗎?另外,怎麼樣的錯誤的「公司」[email protected]「',應該怎麼處理? – Guffa

+0

嗨Guffa,對不起,我糾正了不匹配的csv。我沒有太多的常規預期知識,所以想要幫助。 –

回答

1

你應該嘗試修復不當逃脫源字符串,而不是用正則表達式來彌補。如果你不能做到這一點,迫切希望得到的東西做,一個快速和骯髒的方法是刪除不上逗號邊界或開始報價/字符串的結尾:

resultString = Regex.Replace(subjectString, "(?<!,|^)\"(?!,|$)", ""); 

這假定您每次處理一個CSV行。如果您將整個文件放在一個字符串中,則使用RegexOptions.Multiline作爲第三個參數。

+0

Tim,它的工作原理:-) 非常感謝您的快速幫助 –

1

至於應該有一些空白字符逗號周圍,你應該

output = Regex.Replace(input, "(?<!,\s*)\"(?!\s*,)", ""); 

CSV標準去讓雙引號內,如"this is a ""legal"" format"

要移去那些所謂這樣的報價,你應該使用

output = Regex.Replace(input, "(?<!,\s*)\"{2}(?!\s*,)", ""); 
+0

您確定逗號周圍有空格嗎?例如,Python的CSV解析器將這樣的空格視爲重要的,並使其成爲該字段的一部分 –

+1

@TimPietzcker - 如果沒有使用引號,例如行12,34,「56」,7'代表後面有空格的'12',前面有空格的'34',沒有空格的'56'和沒有空格,所以引號前後的空格被忽略,如果這樣的項目被引用。清除?:) OP的問題是不符合CSV標準的,所以...無論如何,你有信用。祝你好運! –

+0

啊,謝謝澄清! –