2013-04-24 64 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文本。第二行将该文本分割成由逗号分隔的数组(,),并返回总数。

相关问题