有沒有辦法,說一個正則表達式,即使這會刪除任何逗號包圍在兩個連續的引號中,並用字母或數字包圍?從立即字母或數字或除引號之外的任何字符中刪除逗號?
不知道其他人在這裏做什麼,這是我最後的希望我去尋找在CSV助手之前:
我使用Visual Studio的SSIS/BI導入文本文件到數據庫中。問題是,如果該文件包含這樣的數據SSIS會塞滿:
「足球岩石,是它」
爲了解決這個問題,我使用了一個替換方法暫時解決了這個問題。 我在Visual Studio BI/SSIS Script task
中運行此代碼以在將文本文件發送到數據庫之前將其處理爲CSV。
static void AddComma(string s, TextWriter writer)
{
foreach (var line in s.Replace(", ", "").Split(new string[] { Environment.NewLine}, StringSplitOptions.None))
{
foreach (var t in line)
{
writer.Write(t);
}
writer.WriteLine();
}
writer.Flush();
}
static void Main(string[] args)
{
TextReader reader = new StreamReader(@"C:\sample\test.txt");
string a = reader.ReadToEnd();
reader.Close();
FileStream aFile = new FileStream(@"C:\sample\test.csv", FileMode.Create);
AddComma(a, new StreamWriter(aFile));
aFile.Close();
}
注:我更換逗號緊跟一個空格
Replace(", ", "");
的問題是,如果在文本文件中的數據是這樣的:
「足球岩石,是的它確實「
顯然,替換方法不會抓住它。
有沒有辦法,說一個正則表達式,即使這將刪除任何逗號包圍在兩個連續的引號中,並由字母或數字包圍?
因此,如果數據是這樣的:「足球岩石,是它」或者「足球岩石54,23是它」,那麼它最終會是這樣的:「足球岩石是它」
我不確定什麼是可能的,只是尋找某種解決方案。
使用[**'LumenWorks Framework **](http://www.codeproject.com/Articles/9258/A-Fast-CSV-Reader)它是一個可以解析CSV樣式數據的可用庫。你的榜樣是沒有道理的,根據你提到的規則,不會「踢足球」,是的,它會「產生」「足球是的」。 – Prix
不,它將簡單地刪除逗號:「足球岩石是的」,如果有一個逗號,它將在立即字母之間:如此Rocks&是。我不是暗示我知道這會起作用,我只是問什麼是可能的。 – Asynchronous
如果您刪除了逗號,您將更改發送給您的數據。也許發件人不在乎,也許發件人是。正確讀取CSV比通過逗號分隔要複雜得多。很多人都有同樣的需求,並讓圖書館來解決你甚至沒有想過的角落案例。那麼爲什麼要重新發明輪子? – Corak