Теперь Кью работает в режиме чтения

Мы сохранили весь контент, но добавить что-то новое уже нельзя

Как лучше отформатировать телефонные номера с помощью регулярных выражений?

Есть задача: напишите функцию, принимающую строку с номерами телефонов, перечисленными через запятую и приводящую их в формат +7(xxx)xxx-xx-xx. В случае же, если номер не подходит под формат, выводить INCORRECT_FORMAT вместо номера. Регулярную функцию под формат написала. Как лучше задать условия для перебора номеров?

Программирование
Мила Крук
  ·   · 739
Программист-любитель = )  · 29 июл 2021

Если необходимо именно искать номера с помощью регулярных выражений, то всё, что понятно из условия задачи, это то, что в номерах не содержится запятая, все остальные символы они вполне могут содержать. Отсюда регулярное выражение: "\b" - начало слова, "[^,]+" - любое количество любых символов, кроме запятой, "\b" - конец слова:

re.findall(r'\b[^,]+\b', string)

string - исходная строка с телефонными номерами

Однако, регулярные выражения использовать не обязательно, если номера перечислены только через запятую. Проще всего разбить строку методом ".split(',')" или "split(', ')", если после запятой есть пробел. В крайнем случае можно использовать "re.split('\s*,\s*', string)", чтобы убрать все пробелы в начале и конце номеров(до и после запятой).

Довольно удобно использовать регулярное выражение, чтобы перед разбивкой убрать все лишние символы из исходной строки, оставив только знак "+" и цифры(и, конечно же, запятые):

numbers = re.sub('[^+0-9,]', '', string).split(',')

Слова, не содержащие цифры и "+" тоже останутся(в виде пустых строк), и вместо них тоже можно будет вывести INCORRECT_FORMAT.