If you read the documentation, experiment, you can find that the name can be extracted in this way
TextSelection fioTs = _document.FindString("ФИО", true, true); ITextRange[] fioTrs = fioTs.GetRanges(); string fio = (fioTrs[0].NextSibling as ITextRange).Text;
However, not everything is so simple ... For example, the string happy birthday. spawns 3 TextRange, and the last NextSibling will not have a TextRange type. I had to write a little harder.
Class where to save the extracted information
class Person { public string FIO { get; set; } public string Birthday { get; set; } public string Position { get; set; } public string WorkTime { get; set; } }
Main working class
class DocService { private readonly string _pathToFile; private Document _document; private const string _FIO = "ФИО"; private const string _BIRTHDAY = "Дата рожд."; private const string _POSITION = "Должность:"; private const string _WORK_TIME = "Время работы:"; //ctor public DocService(string pathToFile) { _pathToFile = pathToFile; } internal Person GetPerson() { if (_document == null) LoadDocument(); List<ITextRange> foundRanges = new List<ITextRange>(); var tsFio = _document.FindString( _FIO, true, true); var trFio = tsFio.GetRanges(); foundRanges.AddRange(trFio); var tsBirthday = _document.FindString(_BIRTHDAY, true, true); var trBirthday = tsBirthday.GetRanges(); foundRanges.AddRange(trBirthday); var tsPosition = _document.FindString(_POSITION, true, true); var trPosition = tsPosition.GetRanges(); foundRanges.AddRange(trPosition); var tsTime = _document.FindString(_WORK_TIME, true, true); var trTime = tsTime.GetRanges(); foundRanges.AddRange(trTime); List<IDocumentObject> nodes = GetAllObjects(); //получаем ноды типа TextRange за исключением найденных ранее var textRanges = nodes .Where(node => node.DocumentObjectType == DocumentObjectType.TextRange) .Except(foundRanges) .Cast<ITextRange>() .ToList(); var result = new Person { FIO = textRanges[0].Text, Birthday = textRanges[1].Text, Position = textRanges[2].Text, WorkTime = textRanges[3].Text }; return result; } private void LoadDocument() { _document = new Document(); try { _document.LoadFromFile(_pathToFile); } catch (Exception ex) { Console.WriteLine($"Ошибка чтения файла: {ex.Message}"); } } private List<IDocumentObject> GetAllObjects() { List<IDocumentObject> nodes = new List<IDocumentObject>(); Queue<ICompositeObject> containers = new Queue<ICompositeObject>(); containers.Enqueue(_document); while (containers.Count > 0) { ICompositeObject container = containers.Dequeue(); DocumentObjectCollection docObjects = container.ChildObjects; foreach (DocumentObject docObject in docObjects) { nodes.Add(docObject); if (docObject is ICompositeObject) { containers.Enqueue(docObject as ICompositeObject); } } } return nodes; } }
It turns out 
PS I hope everyone understands that this example works only in the case of a document containing the lines from the example. If there is something else in the document, then you need to further work on filtering the nodes.