我需要解析其中列由列分隔的字符串輸入和包含在數據中的逗號的任何字段被包裝在引號(逗號分隔,引用的文字標識)。對於這個項目,我需要刪除引號和引號對之間發生的任何逗號。基本上,我需要刪除包含在字段中的逗號和引號,同時保留用於分隔字段的逗號。這裏有一個小的代碼,我放在一起處理簡單的場景:解析逗號和quotemarks在退化CSV文件中使用正則表達式
// Sample input 1: This works and covers 99% of the records that I need to parse.
string str1 = "[email protected],2010/03/27 12:2:02,,some_first_name,some_last_name,,\"This Address Works, Suite 200\",Some City,TN,09876-5432,9795551212x123,XYZ";
str1 = Regex.Replace(str1, "\"([^\"^,]*),([^\"^,]*)\"", "$1$2");
Console.WriteLine(str1);
// Outputs: [email protected],2010/03/27 12:2:02,,some_first_name,some_last_name,,This Address Works Suite 200,Some City,TN,09876-5432,9795551212x123,XYZ
儘管此代碼適用於大多數的我的記錄,當一個字段包含不止一個逗號這是行不通的。我想要做的是修改代碼,以便刪除列中包含的逗號的每個實例,而不管該字段中有多少個逗號。我不想硬編碼只處理2個逗號,3個逗號或25個逗號。該代碼應該刪除該字段中的所有逗號。以下是我的代碼無法正確處理的示例。
// Sample input 2: This doesn't work since there is more than 1 comma between the quotes.
string str2 = "[email protected],2010/03/27 12:2:02,,some_first_name,some_last_name,,\"i,l,k,e, c,o,m,m,a,s, i,n ,m,y, f,i,e,l,d\",Some City,TN,09876-5432,9795551212x123,XYZ";
str2 = Regex.Replace(str2, "\"([^\"^,]*),([^\"^,]*)\"", "$1$2");
Console.WriteLine(str2);
// Desired output: [email protected],2010/03/27 12:2:02,,some_first_name,some_last_name,,i like commas in my field,Some City,TN,09876-5432,9795551212x123,XYZ
我該如何用正則表達式來實現?
格式你所描述的匹配準確CSV。爲什麼不使用現有的CSV解析器? – 2010-03-27 20:20:19
我正在使用SSIS導入幾千個傳統日誌文件。但是,這些文件存在數據質量問題。有些文件有13列,有些列有14列,有些引用包含逗號的文本字段,有些不使用引號併產生「額外」列等等。我描述的更多問題,但是我已經能夠在我的數據流中通過腳本轉換來處理它們 - 除了帖子中描述的問題之外。 – 2010-03-29 06:19:54