Помогите с регулярными выражениями

import re

def sanitize_phone_number(phone):
    phone = [re.sub('\D', '', digit)
             for digit in [phone_number
             for phone_number in phone]] # тут пробовал добавить if digit.isdigit()
    print(phone)
    return phone


uneditted_numbers = ['', '', '', '', '', '3', '8', '', '0', '5', '0', '', '1', '2', '3', '', '3', '2', '', '3', '4']

sanitize_phone_number(uneditted_numbers)

Я уже сделал шаблон для ввода1:

    "    +38(050)123-32-34    ",
    "     0503451234",
    "   ( 050   )8889900",
    "38050-111-22-22",
    "38050 111 22 11   "

Но моя программа не может справится с вводом в примере. Как мне вывести целый номер без пропусков одним элементом? Уже несколько часов не могу найти решения. Если добавляю digit.isdigit() для ввода в коде, то при ввод1 уже выводит пустые списки...


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

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

Пример:

import re

def sanitize_phone_number(phone: str) -> str:
    return re.sub(r'\D', '', phone)

items = [
    " +38(050)123-32-34 ", " 0503451234", " ( 050 )8889900", "38050-111-22-22", "38050 111 22 11 ",
    "'', '', '', '', '', '3', '8', '', '0', '5', '0', '', '1', '2', '3', '', '3', '2', '', '3', '4'"
]
for phone in items:
    new_phone = sanitize_phone_number(phone)
    print(f'{phone!r} -> {new_phone!r}')

Результат:

' +38(050)123-32-34 ' -> '380501233234'
' 0503451234' -> '0503451234'
' ( 050 )8889900' -> '0508889900'
'38050-111-22-22' -> '380501112222'
'38050 111 22 11 ' -> '380501112211'
"'', '', '', '', '', '3', '8', '', '0', '5', '0', '', '1', '2', '3', '', '3', '2', '', '3', '4'" -> '380501233234'
→ Ссылка