Пишу приложение, которое должно из шаблонного текста извлекать данные. В т.ч. ФИО. ФИО всегда полностью, например ПЕТРОВ ПЁТР ПЕТРОВИЧ, или СИДОРОВ-ПЕТРОВ СИДОР СИДОРОВИЧ.
Само регулярное выражение выглядит так:
@"(?<=Должник.*)([А-ЯЁ][а-яё]+[\-\s]?){3,}"
Часть текста из которой извлекается ФИО выглядит примерно как под спойлером, но могут пропадать пробельные символы, например запись может быть просто в одну строку.
spoilerДолжник:
ИВАНОВ ИВАН ИВАНОВИЧ
123456,РОССИЯ,Иркутская обл,,Иркутск г,,Несуществующая ул,12,,
Дата рождения: 01.01.1970
Место рождения: РОССИЯ
Вызов регулярного выражения в коде происходит с "RegexOptions.IgnoreCase" т.к. неизвестно в каком регистре будет ФИО. В итоге из текста выше извлекается "ИВАНОВ ИВАН ИВАНОВИЧ " без каких-то проблем. Если добавить в конец регулярки [а-яё], то будет извлекаться без пробела.
Но иногда, во входных данных может попадаться ФИО из двух слов, например как здесь:
spoilerДолжник:
ИВАНОВ ИВАН
123456,РОССИЯ,Иркутская обл,,Иркутск г,,Несуществующая ул,12,,
Дата рождения: 01.01.1970
Место рождения: ТАДЖИКИСТАН
И по какой-то причине регулярное выражение без проблем находит в этом тексте "ИВАНОВ ИВАН ".
В чём причина такого поведения, и как это можно исправить?
В MSDN написано, что квантификатор "{ n ,}" означает, что "Предыдущий элемент повторяется как минимум n раз." Соответственно, я ожидаю что такое регулярное выражение должно находить конструкцию минимум из трёх слов. Но почему-то это не так.