Регулярное выражение для поиска ФИО python
Мне на вход подаются строки типа: 'Иван Иванов', 'Ирина', 'Dmitry Glebov', 'Каримов Валентин Иванович' и мне нужно регулярное выражение для проверки ФИО на корректность (корректно введённым ФИО считается ФИО на кириллице, в котором содержится хотя бы имя и фамилия)Я только начал изучать регулярные выражения и написал это '[а-яА-Я]{2,3}' , но оно может принять, например, строку 'Никита', как мне переделать это выражение? Или это выражение не правильно в корне?
Ответы (2 шт):
В вашем варианте [а-яА-Я]{2,3} вы задаете строки, состоящие из 2 или 3 символов кириллицы. Вам же нужно задать два-три слова неограниченной длинны на кириллице. В частности у вас не хватает пробельных символов и спецификаторов повтора символов. Может выглядеть примерно так, как указал Wiktor Stribiżew в комментарии
[А-ЯЁ][а-яё]+\s+[А-ЯЁ][а-яё]+(?:\s+[А-ЯЁ][а-яё]+)?
^(?:[А-ЯЁ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 раза.
После чего делаем необязательную проверку на Оглы и Гызы(?:[Оо]глы|[Гг]ызы)?, так как они так же указаны в паспортах и их часто заполняют(пытаются) на сайтах.
Завершает все символ $ как писалось ранее - символ конца строки.