使用不同的分隔符从文本文件中提取数据

时间:2011-04-27 19:23:03

标签: c# .net regex

我有一个文本文件需要拆分成一个数组,数组的每个元素都包含1个人的数据。然后我将使用Regex(C#)来提取该人的所有数据。我遇到的问题是当文件中的模式发生变化时,匹配每个人的开始。见下文:

数据的简化版本如下:

地址FirstName \ r \ n姓氏NHS No Age = 44 \ r \ n
地址FirstName \ r \ n姓氏NHS No 12345 \ r \ n
地址FirstName \ r \ n姓氏NHS No Age = 35 \ r \ n
地址FirstName \ r \ n姓氏NHS No 54321 \ r \ n

正如您所看到的,文件中存在换行符,因此StreamReader.Readline()方法可能无法正常工作。 地址名称和姓氏字段是固定长度字段,我可以使用子字符串提取这些字段。一旦我对每个人的开始/结束都有一致的标记,我就可以分成一堆人。

我需要使用Regex.Replace来添加人物标记的开头,然后使用此标记分割成数组。我很感激任何帮助。

2 个答案:

答案 0 :(得分:1)

  

有些人在面对问题时会思考   “我知道,我会使用正则表达式。”现在他们有两个问题。 Jamie Zawinski

您是否确信正则表达式会使您的代码更易于编写,阅读和维护?

请考虑使用String.Split()

答案 1 :(得分:1)

根据您的评论,看起来每行代表一个实体,无论格式的细微差别如何。首先,您可以逐行阅读文件,并使用String.Split将每行分成单词:

using (StreamReader sr = new StreamReader("addresses.txt")) 
{
     string line;
     // Read and display lines from the file until the end of 
     // the file is reached.
     while ((line = sr.ReadLine()) != null) 
     {
         string[] tokens = line.Split(' ');

         // variant 1: Address FirstName Surname NHS No //Person1 Age = 44
         // variant 2: Address FirstName Surname NHS No //person 2 12345

         Console.Writeline("Address: ", tokens[0]);
         Console.Writeline("First name: ", tokens[1]);

         // etc.
     }
}