我有一个文本文件需要拆分成一个数组,数组的每个元素都包含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来添加人物标记的开头,然后使用此标记分割成数组。我很感激任何帮助。
答案 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.
}
}