如何与C#Regex进行最后一场比赛

时间:2015-10-24 10:27:23

标签: c# regex

我正在尝试使用正则表达式使用下面的代码读取大文本文件中的最后一个序列号。在每行文本开头的文本文件中,序列号前后有两个空格。如果文件太大,这需要相当长的时间。是否可以从文件末尾读取文本文件到开头,以便单独使用Match进行第一次捕获将获得答案并减少c#所用的时间。提前谢谢。

string contents = File.ReadAllText(path);
string pattern = @"(?<=\s{2}\d{1,7}(?=\s{2})";
MatchCollection matches = Regex.Matches(contents, pattern);
string lastmatch = string.Empty;
foreach (Match s in matches)
{
   lastmatch = s.Groups[0].ToString();
}
MessageBox.Show(lastmatch);

文本文件看起来像。

  1  Blah Blah Blah.  
  2  Ding Dong Bell.  
  3  Hello, how are you.  
  4  My name is Unnikrishnan.  
  5  You are a very good friend.  

1 个答案:

答案 0 :(得分:2)

我是如何调整堆栈溢出中找到的答案为我的目的是这样的。在我的情况下,特定的文本文件是75 MB。还有更大的文件我想检查。任何文件大小,我都会在眨眼间得到答案。

public int w { get; set; }

    public void determineSizeOfFile()
    {
        //Not used at present. Designed to count the no. of serial no. of items in the file.
        using (var reader = new StreamReader(fileToProcess)) //Remarkable solution learnt from stack overflow.
        {
            if (reader.BaseStream.Length > 1024)
            {
                reader.BaseStream.Seek(-60000, SeekOrigin.End);
            }
            string line;
            string lastmatch = string.Empty;
            while ((line = reader.ReadLine()) != null)
            {
                string pattern = @"(?<=\s{2})\d{1,7}(?=\s{2})";
                Match match = Regex.Match(line, pattern);
                if (match.Success)
                {
                    lastmatch = match.Value;
                    w = Convert.ToInt32(lastmatch);
                }
            }
        }
    }