0

我在正则表达式上度过了一段糟糕的时光。我承认这很糟糕,但是当我需要时,我只是没有足够地使用它们来变得非常好。基本上由于我们的应用程序的运行方式,我将一个 .csv 文件的内容提取到一个字符串中。我需要在已经存在的内容上方和下方插入一个新行。列的数量可能会因报告而异。我想做的是在字符串中的第一组 \r\n 之前抓取所有没有任何其他字符(包括空格)的逗号。这样我就有了所有的列,我可以在顶部插入一个空白行并用我需要的内容填充列。以下是 .csv 文本的示例:

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

我希望正则表达式抓住什么:

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

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

4

3 回答 3

2

您不需要正则表达式。

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

如果您无权访问file.ReadLines()方法,则可以使用此链接中的以下内容:

string firstline = test.Substring(0, test.IndexOf(Environment.NewLine));
于 2013-04-24T11:33:26.303 回答
2

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

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

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

现在columns变量有你的总列数。


第一行仅从CSV 文本中获取第一行。第二行将该文本拆分为一个以逗号 ( ,) 分隔的数组,并返回总数。

于 2013-04-24T12:01:05.820 回答
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
}
于 2013-04-24T11:56:06.417 回答