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

正则高手请进----如何用正则匹配txt文档中的内容,并读取出匹配的内容~~~
rt

------解决方案--------------------
这个比较好。上面写了2个不完善。
(? <=DX ?=\D*?)(?!0{2,}(\.0+)?)\d+(\.\d+)?
------解决方案--------------------
有两种方式,我这没有那么大量的数据,效率不好说,楼主看下吧

int state = 0;
Regex reg = new Regex(@ "(? <=DX\s*=\s*-?)\d+(?:\.\d+)? ", RegexOptions.Compiled);
using (StreamReader sr = new StreamReader(@ "e:\test.txt ", System.Text.Encoding.Default))
{
while (sr.Peek() > = 0)
{
string line = sr.ReadLine();
if (state == 0)
state = 1;
else if (state == 1)
{
richTextBox2.Text += reg.Match(line).Value + "\n ";
state = 2;
}
else
state = 0;
}
}

上面是根据你给的数据的规律,只去匹配数据行,这个要求所有txt都符合这个数据出现的规律,否则不适用


string content = string.Empty;
Regex reg = new Regex(@ "(? <=DX\s*=\s*-?)\d+(?:\.\d+)? ", RegexOptions.Compiled);
using (StreamReader sr = new StreamReader(@ "e:\test.txt ", System.Text.Encoding.Default))
{
while (sr.Peek() > = 0)
{
string line = sr.ReadLine();
content = reg.Match(line).Value;
if (content.Length != 0)
richTextBox2.Text += content + "\n ";
}
}

这个是每行都匹配,然后判断结果是否为空

当然,由于你这里只是为了匹配,而不是验证规则,所以如果能确保一定有沁数点,那么正则可以用
Regex reg = new Regex(@ "(? <=DX\s*=\s*-?)\d+\.\d+ ", RegexOptions.Compiled);
------解决方案--------------------
非组捕获。取消分组,提高效率。