Это процесс создания регулярного выражения для очистки номера телефона.
Сначала нам нужно сопоставить код города (3 цифры), транк (3 цифры) идобавочный номер (4 цифры):
reg = re.compile("\d{3}\d{3}\d{4}")
Теперь мы хотим захватить соответствующий номер телефона, поэтому добавляем скобки вокруг частей, которые нам интересны (все):
reg = re.compile("(\d{3}\d{3}\d{4})")
Код города, транк и расширение могут быть разделены до 3 символов, которые не являются цифрами (например, в случае использования пробелов вместе с разделителем дефиса / точки):
reg = re.compile("(\d{3}\D{0,3}\d{3}\D{0,3}\d{4})")
Теперь телефонный номер может фактически начинаться с символа (
(если код города заключен в круглые скобки):
reg = re.compile("(\(?\d{3}\D{0,3}\d{3}\D{0,3}\d{4}).*?")
Теперь этот телефонный номер, вероятно, встроен в кучу другого текста.:
reg = re.compile(".*?(\(?\d{3}\D{0,3}\d{3}\D{0,3}\d{4}).*?")
Теперь этот другой текст может содержать новые строки:
reg = re.compile(".*?(\(?\d{3}\D{0,3}\d{3}\D{0,3}\d{4}).*?", re.S)
Наслаждайтесь!
Я лично остановлюсь здесь, но если выочень хочется убедиться, что в качестве разделителей используются только пробелы, дефисы и точкиВы можете попробовать следующее (не проверено):
reg = re.compile(".*?(\(?\d{3})? ?[\.-]? ?\d{3} ?[\.-]? ?\d{4}).*?", re.S)