簡體   English   中英

用於解析CSV的正則表達式

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM