C#正则表达式提取文本中以逗号间隔的数据

   使用正则表达式提取文本数据到内存是很方便的技术,下面通过一个例子介绍一下如何使用正则表达式提取文本

成都创新互联公司坚持“要么做到,要么别承诺”的工作理念,服务领域包括:网站建设、成都网站建设、企业官网、英文网站、手机端网站、网站推广等服务,满足客户于互联网时代的西丰网站设计、移动媒体设计的需求,帮助企业找到有效的互联网解决方案。努力成为您成熟可靠的网络建设合作伙伴!

   文本中内容格式

   1,2,3,4,5

   2,2,2,2,2

   3,3,3,3,3

   C#代码如下

public List> GetDataCSV(string path)
{
        string pattern = @"\d+";
	List> data = new List>();
	using(StreamReader sr = new StreamReader(@path, Encoding.GetEncoding("GB2312")))
	{
		string nextline;
		MatchCollection myMatches;
		while((nextline = sr.ReadLine()) != null )
		{
			myMatches = Regex.Matches(nextline, pattern);
			List rowdata = new List(); ;
			foreach(Match nextmatch in myMatches)
			{
				rowdata.Add(nextmatch.Value);
			}
			data.Add(rowdata);
		}
		//消除最后的空行
		for(int i=data.Count-1;i>=0;i--)
		{
			if(data[i].Count ==0)
			{
				data.Remove(data[i]);
			}
			else
			{
				break;
			}
		}  
	}
	return data;
}

上面代码试用标准格式,逗号间都有数据,此外逗号间无数据如

    1,2,3,4

    2,,3,3

    3,3,3,3

方法如下:

public List> GetDataFromCSV(string path)
{
	List> data = new List>();
	using(StreamReader sr = new StreamReader(@path, Encoding.GetEncoding("GB2312")))
	{
		string nextline;
		while((nextline = sr.ReadLine()) != null )
		{
			List row = new List();
			char[] charArray = nextline.ToCharArray();
			int flag = 0;
			for (int i = 0; i < charArray.Length;i++)
			{
				if(charArray[i] != ',' && i != (charArray.Length -1))
				{
					continue;
				}
				else
				{
					if(flag == i)
					{
						row.Add("-1");//若空值赋值-1,此处赋值可自行定义
						flag = i + 1;
						if(i == charArray.Length - 1)//若最后一个为逗号,需在加一个空值,即添加-1代表空
						{
							row.Add("-1");
						}
					}
					else
					{
						string s;
						if(i == charArray.Length - 1)//最后一个数时提取字符串length=i-flag + 1
						{
							s = nextline.Substring(flag, i - flag + 1);
						}
						else
						{
							s = nextline.Substring(flag, i - flag);
						}
						flag = i + 1;
						row.Add(s);
					}
				}
			}
			data.Add(row);
		}
		//消除最后的空行
		for(int i=data.Count-1;i>=0;i--)
		{
			if(data[i].Count ==0)
			{
				data.Remove(data[i]);
			}
			else
			{
				break;
			}
		}  
	}
	return data;
}

文章标题:C#正则表达式提取文本中以逗号间隔的数据
本文地址:http://myzitong.com/article/ipdcos.html