2013-08-03 36 views
0

有沒有辦法,說一個正則表達式,即使這會刪除任何逗號包圍在兩個連續的引號中,並用字母或數字包圍?從立即字母或數字或除引號之外的任何字符中刪除逗號?

不知道其他人在這裏做什麼,這是我最後的希望我去尋找在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是它」,那麼它最終會是這樣的:「足球岩石是它」

我不確定什麼是可能的,只是尋找某種解決方案。

+0

使用[**'LumenWorks Framework **](http://www.codeproject.com/Articles/9258/A-Fast-CSV-Reader)它是一個可以解析CSV樣式數據的可用庫。你的榜樣是沒有道理的,根據你提到的規則,不會「踢足球」,是的,它會「產生」「足球是的」。 – Prix

+0

不,它將簡單地刪除逗號:「足球岩石是的」,如果有一個逗號,它將在立即字母之間:如此Rocks&是。我不是暗示我知道這會起作用,我只是問什麼是可能的。 – Asynchronous

+0

如果您刪除了逗號,您將更改發送給您的數據。也許發件人不在乎,也許發件人是。正確讀取CSV比通過逗號分隔要複雜得多。很多人都有同樣的需求,並讓圖書館來解決你甚至沒有想過的角落案例。那麼爲什麼要重新發明輪子? – Corak

回答

1

您的意思是說像this

如果是的話,你應該使用匹配正則表達式匹配器("[\w\s]*),([\w\s]*"),並獲得第一和第二組,然後你會得到你所需要的。

如果你使用C#,這意味着你使用.net引擎正則表達式,那麼你可以使用無限重複lookbehind。

你可以嘗試這樣的然後s.Replace("(?<="[\w\s]+),(?=[\w\s]+")","-"),所以你可以直接替換它,而不需要獲得組和匹配。

+0

是的,這可能會工作,但第二,但也許我應該添加一個連字符:像「蠢朋克好 - 他們岩石!!」無論如何,在這一點上,我只是筋疲力盡。 :) – Asynchronous

+0

@UnaverageGuy休息一下,這將有助於 –

+0

謝謝我的朋友! – Asynchronous

相關問題