日期:2014-05-18  浏览次数:21092 次

如何用正则表达式提取文本文件中的全部数字
大哥们。。我的文本格式是这样的
1.1,2,3
3,2.3,1
1,1,1
3,4,5.6
.....
.....(N行。(大概10000行左右,具体行数不固定。。)
怎么样用正则表达式将里面所有的数字赋给数组啊。。能给段代码并解释下好吗,谢谢。。(先叩谢了。。)

------解决方案--------------------
openFileDialog1.InitialDirectory = ("E:\\C#");
openFileDialog1.Filter = "Text(*.txt)|*.txt|Word(*.doc)|*doc|all File(*.*)|*.*|TXL(*.Txl)|*.Txl";
DialogResult r = openFileDialog1.ShowDialog();
string filepath = openFileDialog1.FileName;
if (r == DialogResult.OK)
{
System.IO.FileStream fs;
fs = new FileStream(openFileDialog1.FileName,System.IO.FileMode.Open);
BinaryReader sr = new BinaryReader(fs);
string ss = (sr.ReadChar()).ToString();
while(ss!="\r") //条件
{
textBox1.Text+=ss;
ss = (sr.ReadChar()).ToString();
}

}
------解决方案--------------------
用正则更慢。考虑whChina的方法。
------解决方案--------------------
这个东西还是split比正则快
不是什么都正则好的
------解决方案--------------------
引用楼主 13802586577 的帖子:
大哥们。。我的文本格式是这样的
1.1,2,3
3,2.3,1
1,1,1
3,4,5.6
.....
.....(N行。(大概10000行左右,具体行数不固定。。)
怎么样用正则表达式将里面所有的数字赋给数组啊。。能给段代码并解释下好吗,谢谢。。(先叩谢了。。)

------解决方案--------------------
private void button1_Click(object sender, EventArgs e)
{
System.IO.StreamReader mysr = new System.IO.StreamReader(@"c:\aa.txt");
DateTime n = DateTime.Now;
richTextBox1.AppendText(n.ToString()+"\n");
while((strline = mysr.ReadLine()) != null)
{
aryline = strline.Split(new char[]{','}); 
x= Convert.ToDouble(aryline[0])/1000; //这个数据我在其他地方会使用到 
y= Convert.ToDouble(aryline[1])/1000; 
z= Convert.ToDouble(aryline[2])/1000;
Console.WriteLine("{0},{1},{2}",x,y,z);
}
DateTime tt = DateTime.Now;
richTextBox1.AppendText(tt.ToString()+"\n");
richTextBox1.AppendText((tt-n).ToString()+"\n");
}

你可以验证一下
时间很短
2008-8-1 14:02:46
2008-8-1 14:02:56
00:00:10.5468750
但是上面是有Console输出的,如果这行去掉,那么执行时间如下
2008-8-1 13:58:06
2008-8-1 13:58:06
00:00:00.3437500

一秒都不要就完成了所有的操作。。。。
------解决方案--------------------
忘了说了,我的a.txt文件有3万行
------解决方案--------------------
VB.NET code
            Dim re As System.Text.RegularExpressions.Regex
            re = New Regex("^(\d+\.\d+)|(\d+)$")