Поскольку исходный текст во многом похож на действительные атрибуты XML, я бы посоветовал попытаться выяснить, может ли его синтаксический анализ XML действительно помочь.
Попробуйте это:
var errors =
File
.ReadLines(FileName)
.Select(x => $"<root {x} />")
.Select(x => XDocument.Parse(x))
.Where(x => x.Root.Attribute("PropertyName").Value == "Description1")
.Where(x => x.Root.Attribute("PropertyValue").Value == "")
.ToArray();
В ваших примерах данных для меня это выглядит следующим образом:
<root propertyDescriptor="22004" PropertyName="Description1" PropertyType="Part" PropertyValue="" />
Вы, конечно, можете поиграть с этим довольно чистым запросом, чтобы он выводил сообщения, которые вы sh.
.