我正常的表情很糟糕。对我来说很难承认,但是当我需要的时候,我只是不要用它们来做得很好。基本上由于我们的应用程序运行的方式,我将.csv文件的内容拉出到一个字符串中。我需要在已经存在的内部和下方插入一个新行。列数可能会根据报告而更改。我想要做的是抓取所有逗号,没有任何其他字符(包括空格)直到字符串中的第一组\ r \ n。这样我就拥有了所有列,我可以在顶部插入一个空行,并根据我的需要填充列。以下是.csv文本的示例:
"Date, Account Code, Description, Amount\r\n23-Apr-13,12345,Account1,$12345\r\n"
我希望正则表达式获取:
",,," or ",,,\r\n"
我似乎无法得到这个。谢谢。
答案 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
}