[英]Regular expression for parsing CSV
我正在嘗試用C#解析CSV文件。 用逗號分隔(,)。 我得到了這個:
[\t,](?=(?:[^\"]|\"[^\"]*\")*$)
拆分此字符串:
2012-01-06,"Some text with, comma",,"300,00","143,52"
給我:
2012-01-06
"Some text with, comma"
"300,00"
"143,52"
但我無法弄清楚如何從輸出中丟失“”,所以我得到了這個:
2012-01-06
Some text with, comma
300,00
143,52
有什么建議么?
如果您嘗試解析CSV並使用.NET,請不要使用正則表達式。 使用為此目的創建的組件。 請參閱.Net中的CSV文件導入問題。
我知道CSV規范看起來很簡單,但是相信我,如果你繼續沿着這條路走下去,你會感到心痛和破壞。
為什么要使用正則表達式? 確保文件格式正確?
你可以使用String.Replace()
String s = "Some text with, comma";
s = s.Replace("\"", "");
// After matched
String line = 2012-01-06,"Some text with, comma",,"300,00","143,52";
String []fields = line.Split(',');
for (int i = 0; i < fields.Length; i++)
{
// Call a function to remove quotes
fields[i] = removeQuotes(fields[i]);
}
String removeQuotes(String s)
{
return s.Replace("\"", "");
}
所以,這樣的事情。 同樣,我不會為此目的使用RegEx,而是YMMV。
var sp = Regex.Split(a, "[\t,](?=(?:[^\"]|\"[^\"]*\")*$)")
.Select(s => Regex.Replace(s.Replace("\"\"","\""),"^\"|\"$","")).ToArray();
所以,這里的想法是,首先,你想用一個雙引號替換雙引號。 然后該字符串被送入第二個正則表達式,它只是刪除字符串開頭和結尾的雙引號。
第一次替換的原因是因為這樣的字符串:
var a = "1999,Chevy,\"Venture \"\"Extended Edition, Very Large\"\" Dude\",\"\",\"5000.00\"";
所以,這會給你一個這樣的字符串:“”擴展版“”,雙引號需要更改為單引號。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.