3 回答

TA貢獻(xiàn)1829條經(jīng)驗(yàn) 獲得超7個(gè)贊
嘗試使用此正則表達(dá)式:
"[^"\r\n]*"|'[^'\r\n]*'|[^,\r\n]*
Regex regexObj = new Regex(@"""[^""\r\n]*""|'[^'\r\n]*'|[^,\r\n]*");
Match matchResults = regexObj.Match(input);
while (matchResults.Success)
{
Console.WriteLine(matchResults.Value);
matchResults = matchResults.NextMatch();
}
:
貓
狗
“ 0 = OFF,1 = ON”
獅子
虎
'R =紅色,G =綠色,B =藍(lán)色'
熊
注意:此正則表達(dá)式解決方案適用于您的情況,但是我建議您使用專用的庫,例如FileHelpers。

TA貢獻(xiàn)1830條經(jīng)驗(yàn) 獲得超9個(gè)贊
為什么不聽從專家的建議,不要滾動(dòng)自己的CSV解析器。
您的第一個(gè)想法是,“我需要在引號(hào)內(nèi)處理逗號(hào)”。
您的下一個(gè)想法是,“哦,糟糕,我需要處理引號(hào)內(nèi)的引號(hào)。轉(zhuǎn)義的引號(hào)。雙引號(hào)。單引號(hào)...”
這是通往瘋狂的道路。不要自己寫。查找具有廣泛的單元測試覆蓋面的庫,該庫涉及所有困難部分,并為您解決了所有困難。對(duì)于.NET,請使用免費(fèi)的開源FileHelpers庫。

TA貢獻(xiàn)1806條經(jīng)驗(yàn) 獲得超8個(gè)贊
只需添加我今天上午工作的解決方案。
var regex = new Regex("(?<=^|,)(\"(?:[^\"]|\"\")*\"|[^,]*)");
foreach (Match m in regex.Matches("<-- input line -->"))
{
var s = m.Value;
}
如您所見,您需要每行調(diào)用regex.Matches()。然后,它將返回MatchCollection,其中具有與列相同數(shù)量的項(xiàng)目。顯然,每個(gè)匹配項(xiàng)的Value屬性都是解析后的值。
這項(xiàng)工作仍在進(jìn)行中,但它很樂意解析CSV字符串,例如:
2,3.03,"Hello, my name is ""Joshua""",A,B,C,,,D
- 3 回答
- 0 關(guān)注
- 1022 瀏覽
添加回答
舉報(bào)