正则高手请进----如何用正则匹配txt文档中的内容,并读取出匹配的内容~~~ rt 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 大量的数据,或者要匹配的内容是按行匹配的,那就ReadLine循环读取,少量数据,或是要提取的内容位置不定,那就全部读取,然后再提取了 果然高手~~是這樣的,我這里有很多.txt文檔,每個.txt里面有很多格式化的信息,但是我只需要其中個別關鍵字。這種情況是否用正則表達式會更好一些哪?(原來用字符串操作) 这个要根据实际情况来看了以下情况适合用正则来做1、如果是每个txt文件的数据量都不大,然后有一些待查关键字,查找文件中都包含哪几个关键字2、查找的关键字只是符合一定的规律,本身是不固定的3、可以按行读取匹配,而且每次匹配用到的正则表达式是一样的暂时想到以上几点,其它情况,能直接用字符串操作的,尽量用字符串操作,因为我们知道,正则使用虽然方便,但效率上是个问题,所以在无法体现出正则优势的地方,能不用尽量不要用 正则作为验证,对效率要求不高地方的字符串分析使用比较好。如果考虑效率,就和正则说bye bye吧。那玩意,整多一个字符少一个字符。效率可能相差千百倍。 距離:(識別碼:9) 介於 (識別碼:8) 以及(識別碼:7) DX = -254.30 -253.30 0.00 距離:(識別碼:14) 介於 (識別碼:13) 以及(識別碼:12) DX = 250.82 250.80 0.02 ------請過兄寫出個表達式,讀出 DX= 后面第一個數值(不分正負號)例如:匹配結果:254.30250.82 (?<=DX=\D*?)(?!0{2,}(\.0+)?$|\n)\d+(\.\d+)? (?<=DX ?=\D*?)(?!0{2,}(\.0+)?$|\n)\d+(\.\d+)? 这个比较好。上面写了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); (?<=DX\s*=\s*-?)\d+(\.\d+)? 這個也可以實現 ,--------------(@"(?<=DX\s*=\s*-?)\d+(?:\.\d+)?" ?: 什么意思? (?:Exp) 非捕获组,只是匹配,并不将结果捕获到组里,因为最终结果要的是\d+(\.\d+)?匹配的内容,所以(\.\d+)的内容无须捕获到组里,主要是为了节省资源 关于正则表达式匹配字符串。。。(急) 静态变量如何序列化? 串口问题 关于配置文件和类 rss文件如何更新? vs2005数据库访问 基础教程,大家来写一段,马上结贴!xml转换例子 datagrid列中显示百分号的问题 上传下载问题,高分求 c# 将2003 的项目文件转换为2005的项目文件时老是失败? 取控件的visible属性时总是false。
是這樣的,我這里有很多.txt文檔,每個.txt里面有很多格式化的信息,但是我只需要其中個別關鍵字。
這種情況是否用正則表達式會更好一些哪?(原來用字符串操作)
1、如果是每个txt文件的数据量都不大,然后有一些待查关键字,查找文件中都包含哪几个关键字
2、查找的关键字只是符合一定的规律,本身是不固定的
3、可以按行读取匹配,而且每次匹配用到的正则表达式是一样的暂时想到以上几点,其它情况,能直接用字符串操作的,尽量用字符串操作,因为我们知道,正则使用虽然方便,但效率上是个问题,所以在无法体现出正则优势的地方,能不用尽量不要用
DX = -254.30 -253.30 0.00 距離:(識別碼:14) 介於 (識別碼:13) 以及(識別碼:12)
DX = 250.82 250.80 0.02
------
請過兄寫出個表達式,讀出 DX= 后面第一個數值(不分正負號)
例如:匹配結果:
254.30
250.82
(?<=DX ?=\D*?)(?!0{2,}(\.0+)?)\d+(\.\d+)?
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);
(@"(?<=DX\s*=\s*-?)\d+(?:\.\d+)?" ?: 什么意思?