Nikita21z
py.user.next
Лучше удали из номера пробелы и дефисы, а потом используй простое регулярное выражение для теста.
Хмм, так я номера ищу на сайтах парсером, как я удалю дефисы и пробелы
Я наоборот хочу заменить на это регулярное выражение, так как оно очень универсальное и находит номера со всеми символами
Чтобы точно выбирать телефонные номера, нужно из текста сначала выбрать последовательности симоволов, похожие на телефонные номера. Для этого не регулярные выражения надо использовать, а конечный автомат. После того как такая последовательность найдена, её нужно почистить от лишних символов (пробелы, дефисы, скобки). А уже потом надо применить к ней регулярное выражение и уже точно знать, телефонный номер это или нет.
Пример
1. видишь такой текст
текст текст 982+928 34(9)8 текст текст
2. выбираешь из него
982+928 34(9)8
3. чистишь это от пробелов, дефисов и скобок
982+9283498
4. проводишь тест по регулярному выражению ^(\+\d|8)\d{10}$
False
1. видишь такой текст
текст текст +7 (982)-928-34-98 текст текст
2. выбираешь из него
+7 (982)-928-34-98
3. чистишь это от пробелов, дефисов и скобок
+79829283498
4. проводишь тест по регулярному выражению ^(\+\d|8)\d{10}$
True
Как выполнить второй пункт: просто берёшь каждый символ и смотришь, буква это или нет. Можешь выбирать только плюсы, минусы, цифры и круглые скобки. Если не буква то добавляешь в накопительную строку. Если буква, то не добавляешь её, а просто накопленную строку отправляешь на очистку и проверку. Если накопленная и почищенная после этого строка оказалась номером телефона, то сохраняешь его. Можешь, конечно, сохранять все эти накопленные строки в промежуточный файл и потом по этому файлу несколькими разными алгоритмами проходить, чтобы всё, похожее на номера телефонов, выбрать максимально точно.
При этом, если ты отобрал номера, то не факт, что это валидные номера в международном смысле. Например, есть номера +3, но нет номеров +0. То есть тебе потребуется потом ещё и по этому принципу их чистить. Так что пытаться уложиться в одну строчку, чтобы найти номер, - довольно наивная затея. Программирование в том и заключается, что ты пишешь то, что надо, а не то, что красиво. А в данном случае получается такой процесс последовательных фильтраций и тестов, который приводит к очень точной выборке валидных данных, с которыми дальше можно надёжно работать.