rt

解决方案 »

  1.   

    大量的数据,或者要匹配的内容是按行匹配的,那就ReadLine循环读取,少量数据,或是要提取的内容位置不定,那就全部读取,然后再提取了
      

  2.   

    果然高手~~
    是這樣的,我這里有很多.txt文檔,每個.txt里面有很多格式化的信息,但是我只需要其中個別關鍵字。
    這種情況是否用正則表達式會更好一些哪?(原來用字符串操作)
      

  3.   

    这个要根据实际情况来看了以下情况适合用正则来做
    1、如果是每个txt文件的数据量都不大,然后有一些待查关键字,查找文件中都包含哪几个关键字
    2、查找的关键字只是符合一定的规律,本身是不固定的
    3、可以按行读取匹配,而且每次匹配用到的正则表达式是一样的暂时想到以上几点,其它情况,能直接用字符串操作的,尽量用字符串操作,因为我们知道,正则使用虽然方便,但效率上是个问题,所以在无法体现出正则优势的地方,能不用尽量不要用
      

  4.   

    正则作为验证,对效率要求不高地方的字符串分析使用比较好。如果考虑效率,就和正则说bye bye吧。那玩意,整多一个字符少一个字符。效率可能相差千百倍。
      

  5.   

    距離:(識別碼:9) 介於 (識別碼:8) 以及(識別碼:7)
               DX =          -254.30         -253.30            0.00            距離:(識別碼:14) 介於 (識別碼:13) 以及(識別碼:12)
               DX =           250.82          250.80            0.02            
    ------
    請過兄寫出個表達式,讀出 DX= 后面第一個數值(不分正負號)
    例如:匹配結果:
    254.30
    250.82
      

  6.   

    (?<=DX=\D*?)(?!0{2,}(\.0+)?$|\n)\d+(\.\d+)?
      

  7.   

    (?<=DX ?=\D*?)(?!0{2,}(\.0+)?$|\n)\d+(\.\d+)?
      

  8.   

    这个比较好。上面写了2个不完善。
    (?<=DX ?=\D*?)(?!0{2,}(\.0+)?)\d+(\.\d+)?
      

  9.   

    有两种方式,我这没有那么大量的数据,效率不好说,楼主看下吧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);
      

  10.   

    (?<=DX\s*=\s*-?)\d+(\.\d+)?     這個也可以實現 ,--------------
    (@"(?<=DX\s*=\s*-?)\d+(?:\.\d+)?"     ?: 什么意思?
      

  11.   

    (?:Exp) 非捕获组,只是匹配,并不将结果捕获到组里,因为最终结果要的是\d+(\.\d+)?匹配的内容,所以(\.\d+)的内容无须捕获到组里,主要是为了节省资源