Я хочу написать код, который может анализировать американские телефонные номера (т.е. (664)298-4397). Ниже приведены ограничения:
- разрешить начальные и конечные пробелы
- разрешать пробелы между кодом города и местными номерами
- без пробелов в коде города или семизначном номере XXX-XXXX
В конечном итоге я хочу напечатать кортеж строк (area_code, first_three_digits_local, last_four_digits_local)
У меня два блока вопросов.
Вопрос 1. Ниже приведены входные данные, которые мой код должен принять и распечатать кортеж:
- '(664) 298-4397', '(664)298-4397', ' (664) 298-4397'
Ниже приведен код, который я пробовал:
regex_parse1 = re.match(r'^([\s]*[(]*[0-9]*[)]*[\s]*)+([\s]*[0-9]*)-([0-9]*[\s]*)$', '(664) 298-4397')
print (f' groups are: {regex_parse1.groups()} \n')
regex_parse2 = re.match(r'^([\s]*[(]*[0-9]*[)]*[\s]*)+([\s]*[0-9]*)-([0-9]*[\s]*)$', '(664)298-4397')
print (f' groups are: {regex_parse2.groups()} \n')
regex_parse3 = re.match(r'^([\s]*[(]*[0-9]*[)]*[\s]*)+([\s]*[0-9]*)-([0-9]*[\s]*)$', ' (664) 298-4397')
print (f' groups are: {regex_parse3.groups()}')
Строковый ввод для всех трех допустим и должен возвращать кортеж:
('664', '298', '4397')
Но вместо этого я получаю вывод ниже для всех трех:
groups are: ('', '', '4397')
Что я делаю не так?
Вопрос 2. Следующие два фрагмента кода должны выводить объект «NoneType» без атрибута «группа», потому что введенная строка номера телефона нарушает ограничения. Но вместо этого я получаю результаты для всех трех.
regex_parse4 = re.match(r'^([\s]*[(]*[0-9]*[)]*[\s]*)+([\s]*[0-9]*)-([0-9]*[\s]*)$', '(404)555 -1212')
print (f' groups are: {regex_parse4.groups()}')
regex_parse5 = re.match(r'^([\s]*[(]*[0-9]*[)]*[\s]*)+([\s]*[0-9]*)-([0-9]*[\s]*)$', ' ( 404)121-2121')
print (f' groups are: {regex_parse5.groups()}')
Ожидаемый результат: должна быть ошибка, но вместо этого я получаю это для всех трех:
groups are: ('', '', '2121')
Что не так с моим кодом регулярного выражения?