正则表达式选择所有逗号到特定字符

时间:2013-04-24 11:07:42

标签: c# regex

我正常的表情很糟糕。对我来说很难承认,但是当我需要的时候,我只是不要用它们来做得很好。基本上由于我们的应用程序运行的方式,我将.csv文件的内容拉出到一个字符串中。我需要在已经存在的内部和下方插入一个新行。列数可能会根据报告而更改。我想要做的是抓取所有逗号,没有任何其他字符(包括空格)直到字符串中的第一组\ r \ n。这样我就拥有了所有列,我可以在顶部插入一个空行,并根据我的需要填充列。以下是.csv文本的示例:

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

我希望正则表达式获取:

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

我似乎无法得到这个。谢谢。

3 个答案:

答案 0 :(得分: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));

答案 1 :(得分:2)

实际上,您不需要使用常规Epression复杂化代码来完成您想要的任务:计算列数。

这是一个非常简单的方法:

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

现在columns变量包含您的总列数。


第一行抓取只是 CSV文本的第一行。第二行将该文本拆分为以逗号(,)分隔的数组,并返回总数。

答案 2 :(得分: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
}