Как сократить регулярное выражение для поиска ФИО python

У меня на вход подаются имена фамилии и (необязательно) отчества. Например 'иван иванов', 'Даня','иван петрович восков', 'Kolya'. Мне нужно отсеить те имена, где есть только имя (только одно слово) и имена, написанные не на кириллице. Я написал такое регулярное выражение r'([А-ЯЁ]|[а-яё]+[А-ЯЁ]|[а-яё\-])+((?:\s+[А-ЯЁ]|[а-яё]+[А-ЯЁ]|[а-яё\-]+)+(?:\s+[А-ЯЁ]|[а-яё]+[А-ЯЁ]|[а-яё\-]+))?', но мой учитель сказал, что оно выглядит ужасно и тут вполне возможны баги. Как мне исправить это выражение?


Ответы (2 шт):

Автор решения: user398098

Уот так вот

[А-ЯЁа-яё]+(\s+[А-ЯЁа-яё]+)+

Если есть переводы строки, которые не надо учитывать то так:

[А-ЯЁа-яё]+([^\S\r\n]+[А-ЯЁа-яё]+)+

Тест https://regexr.com/58ecs

→ Ссылка
Автор решения: cherniy

Моё решение:

r'([А-ЯЁа-яё])+(?:\s+[А-ЯЁа-яё]+){1,2}'
→ Ссылка