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

Мне на вход подаются строки типа: 'Иван Иванов', 'Ирина', 'Dmitry Glebov', 'Каримов Валентин Иванович' и мне нужно регулярное выражение для проверки ФИО на корректность (корректно введённым ФИО считается ФИО на кириллице, в котором содержится хотя бы имя и фамилия)Я только начал изучать регулярные выражения и написал это '[а-яА-Я]{2,3}' , но оно может принять, например, строку 'Никита', как мне переделать это выражение? Или это выражение не правильно в корне?


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

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

В вашем варианте [а-яА-Я]{2,3} вы задаете строки, состоящие из 2 или 3 символов кириллицы. Вам же нужно задать два-три слова неограниченной длинны на кириллице. В частности у вас не хватает пробельных символов и спецификаторов повтора символов. Может выглядеть примерно так, как указал Wiktor Stribiżew в комментарии

[А-ЯЁ][а-яё]+\s+[А-ЯЁ][а-яё]+(?:\s+[А-ЯЁ][а-яё]+)?
→ Ссылка
Автор решения: PotroNik
^(?:[А-ЯЁA-Z][а-яёa-z]+(?:-[А-ЯЁA-Z]?[а-яёa-z]+)?(?:[ ]|$)){2,3}(?:[Оо]глы|[Гг]ызы)?$

Данное регулярное выражение состоит из нескольких основных пунктов:
^ - символ начала строки


(?:...(?:...)...(?:...)) - группы без захвата


(?:[А-ЯЁA-Z][а-яёa-z]+(?:...)...(?:...)) Одна заглавная буква и одна и более строчных букв (на латинице или кириллице)


(?:[А-ЯЁA-Z][а-яёa-z]+(?:-[А-ЯЁA-Z]?[а-яёa-z]+)?(?:...)) - дополнительная необязательная группа из за квантификатора ? означающий 0 или 1 совпадение где вначале идет тире, необязательная заглавная буква и одна и более строчная буква (на латинице или кириллице)


(?:[А-ЯЁA-Z][а-яёa-z]+(?:-[А-ЯЁA-Z]?[а-яёa-z]+)?(?:[ ]|$)) - третья часть это пробел или конец строки


Т.е. в итоге мы получаем под совпадение:

Игорь
Tonny
Максим
Филиппов
Аднанович
Belling
Анна-Мария
Китов-киселев || Китов-Киселев

Далее для основной группы шаблона устанавливаем квантификатор типа {2,3} означающий что количество совпадение может быть от 2 до 3 для Группы, т.е. все предыдущие правила должны повториться подряд 2 или 3 раза.
После чего делаем необязательную проверку на Оглы и Гызы(?:[Оо]глы|[Гг]ызы)?, так как они так же указаны в паспортах и их часто заполняют(пытаются) на сайтах.


Завершает все символ $ как писалось ранее - символ конца строки.

Пример работы

→ Ссылка