2013-04-24 42 views
0

正在使用正則表達式的可怕時間。這對我來說是可怕的承認,但當我需要的時候,我並沒有足夠的使用它們。基本上,由於我們的應用程序運行的方式,我有一個.csv文件的內容拉出到一個字符串。我需要基本上插入一個新的行上面和下面已經存在的。列數可以根據報告而改變。我想要做的是在沒有任何其他字符(包括空格)的情況下將所有逗號截取到字符串中的第一組\ r \ n。這樣我有所有的列,我可以在頂部插入一個空行,並填充我需要的列。下面是該.csv文本的例子:正則表達式來選擇特定字符的所有逗號

"Date, Account Code, Description, Amount\r\n23-Apr-13,12345,Account1,$12345\r\n" 

我想正則表達式搶:

",,," or ",,,\r\n" 

我似乎無法得到這個。謝謝。

+1

我會使用一個'Regex.Replace'來替代模式「[^ \,]」替換爲「」。 – 2013-04-24 11:10:34

+0

另一個trival解決方案是隻抓住線,然後將其分開,並計數令牌。 – 2013-04-24 11:28:25

+0

阿德里安,可以得到所有的逗號,不只是達到\ r \ n – Tom 2013-04-24 11:51:06

回答

2

你不需要這個正則表達式。

string firstLine = file.ReadLines().First(); 
int numCommas = firstLine.Count(c => c == ','); 
string commaString = new String(',', numCommas); 

如果您沒有訪問file.ReadLines()方法,您可以使用從this link如下:

string firstline = test.Substring(0, test.IndexOf(Environment.NewLine)); 
0

你可以使用下面的正則表達式 (?<=[\d\w\s])(\r|\n|,)(?=[\d\w\s\W]) 匹配,和換行字符, 使用可以利用Regex.Replace("inputstring","regexpattern","replacechar", RegexOptions.IgnoreCase)

這可以通過字符串操作本身來完成

string[] strs= inputstr.split(new string[]{"\n","\r",","}, StringSplitOptions.RemoveEmptyEntries); 
foreach(string str in strs) 
{ 
// do you part 
} 
2

實際上,您並不需要使用Regular Epressions將代碼複雜化以實現所需內容:對列進行計數。

這裏有一個非常簡單的方法:

String textline = csvtext.Substring(0, csvtext.IndexOfAny(Environment.NewLine.ToCharArray())); 
int columns = textline.Split(',').Length; 

現在columns變量的總列數。


第一行抓住只是第一線出來的CSV文本。第二行將該文本分割成由逗號分隔的數組(,),並返回總數。

相關問題