Форматирование телефонного номера: регулярное выражение

Програма принимает на ввод мобильный телефон.

Програма должна отформатировать телефонный номер к единому значению.

063 999-99-99 возвращает (+38) 063 999-99-99

063-99999-99 возвращает (+38) 063 999-99-99

+3806399-999-99 возвращает (+38) 063 999-99-99

380639999999 возвращает (+38) 063 999-99-99

Сделал регулярку которая соответсвует формату

r'\(\+38\)\s\d{3}\s\d{3}[\-]\d{2}[\-]\d{2}'

Подскажите пожалуйста как избежать перебора всевозможных вариантов. Сделать так чтобы инпут номер приходил к нужному формату без тонны if, elif, else. Спасибо!


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

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

можно попробовать так:

import re

def num_form(a: str) -> str:
    a=re.sub(r"\D","", a)
    res = re.sub(r"(.*?)(.{3})(.{3})(.{2})(.{2})$", r"(+38) \2 \3-\4-\5", a)
    return res

print(num_form("063 999-99-99"))
print(num_form("063-99999-99"))
print(num_form("+3806399-999-99"))
print(num_form("380639999999"))
(+38) 063 999-99-99
(+38) 063 999-99-99
(+38) 063 999-99-99
(+38) 063 999-99-99
→ Ссылка