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

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

文本中内容格式

1,2,3,4,5

2,2,2,2,2

3,3,3,3,3

C#代码如下

public List<List<string>> GetDataCSV(string path)
{
        string pattern = @"\d+";
	List<List<string>> data = new List<List<string>>();
	using(StreamReader sr = new StreamReader(@path, Encoding.GetEncoding("GB2312")))
	{
		string nextline;
		MatchCollection myMatches;
		while((nextline = sr.ReadLine()) != null )
		{
			myMatches = Regex.Matches(nextline, pattern);
			List<string> rowdata = new List<string>(); ;
			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<List<string>> GetDataFromCSV(string path)
{
	List<List<string>> data = new List<List<string>>();
	using(StreamReader sr = new StreamReader(@path, Encoding.GetEncoding("GB2312")))
	{
		string nextline;
		while((nextline = sr.ReadLine()) != null )
		{
			List<string> row = new List<string>();
			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;
}
时间: 2024-08-05 13:45:51

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

使用vba做一个正则表达式提取文本工具

测试中经常会遇到对数据的处理,比如我要删除某些特定数据,数据源是从网页请求中抓取,这时候可能复制下来一大堆内容,其中我们只需要特定的某些部分,笔者通常做法是拷贝到notepad++中处理,结合RegTester工具,但是RegTest需要导出匹配数据,不能直接拷贝,稍微麻烦了一点点......于是想用vba写一个正则表达式提取工具好了,又不花时间.(晕,刚想起来其实会有在线工具的,比如:http://tool.oschina.net/regex/),虽然找到了在线工具,还是说一下自己做的这个吧~

爬虫(四):正则表达式(提取str中网址)

3.采用beatifulsoup与re正则表达式一起使,提取html中的一些href的链接 http://cuiqingcai.com/1319.html 4.如何利用正则表达式边界匹配

java正则表达式匹配文本中想要的字符串

需求:获取一个本地文件中所有符合 $[MAKE_PACKAGE] 格式的字符串,并输出到另一个文件中. public static void main(String[] args) throws Exception { loadVar("src/cn/don9/templates/Action.txt","src/cn/don9/templateVar/SysActionVar.txt"); } public static void loadVar(String i

C#正则表达式提取HTML中IMG标签的SRC地址

一般来说一个 HTML 文档有很多标签,比如"<html>"."<body>"."<table>"等,想把文档中的 img 标签提取出来并不是一件容易的事.由于 img 标签样式变化多端,使提取的时候用程序寻找并不容易.于是想要寻找它们就必须写一个非常健全的正则表达式,不然有可能会找得不全,或者找出来的不是正确的 img 标签.我们可以从 HTML 标签的格式去想应该怎么建这个正则表达式.首先要想一下 img

C#正则表达式提取HTML中IMG标签中的SRC地址

百度到的一个,这里就直接贴了 http://blog.csdn.net/smeller/article/details/7108502#comments 一般来说一个 HTML 文档有很多标签,比如“<html>”.“<body>”.“<table>”等,想把文档中的 img 标签提取出来并不是一件容易的事.由于 img 标签样式变化多端,使提取的时候用程序寻找并不容易.于是想要寻找它们就必须写一个非常健全的正则表达式,不然有可能会找得不全,或者找出来的不是正确的 im

正则表达式替换文本中的换行

今天工作中遇到了一个问题:使用textarea文本域来存放简单的文本信息,不需要有图片,但是每段文字的换行和缩进还是得需要的. 为了达到这个目的,我的想法是:使用正则表达式匹配到所有文本信息中的换行符,然后将他们替换成html的<p>标签,存储的时候将替换后的文本信息存放到数据库,显示的时候直接从数据库取出数据显示即可. 下面是我的实现代码: HTML: <html xmlns="http://www.w3.org/1999/xhtml"> <head r

Excel-VBA正则表达式提取文本案例

背景是这样的,我手上有一份统计表,需要将IP地址里的省市提取出来,以便于处理.因此我首先想到了Python里的正则表达式,打算写一个自定义函数去批量提取.然而之前没学VBA里的正则表达式语法,因此就去网上搜了一下,结果发现根本不能运行.几经辗转,总算搞定,因此总结一下,供后来者参考. 编程目的:实现IP地址中省市信息的提取.    主要涉及的知识点:VBA函数.正则表达式 代码如下: Function 提取省市(rng As Range, name) Application.Volatile S

Java 正则表达式提取标签中的属性(src 连接地址)等

public class Test { public static void main(String[] args) { String source = "<p><img src=\"https://xxxxx/xxx/xxxx/182cd48c587651767921868181f66ca8.jpg\" />sdfasdfasdfsadfasdfasdfasdfasdfasdf</p><img src=\"https://

使用pyltp提取文本中的地址

首先安装pyltp pytlp项目首页 单例类(第一次调用时加载模型) class Singleton(object): def __new__(cls, *args, **kwargs): if not hasattr(cls, '_the_instance'): cls._the_instance = object.__new__(cls, *args, **kwargs) return cls._the_instance 使用pyltp提取地址 import os from pyltp i