Форум сайта python.su
Привет!
У меня есть вот такой скрипт, который парсит разные данные с сайтов, которые сможет найти.
Прикрепил два файлика:
Исходный файл
Скрипт
Проблема заключается в том, что регулярное выражение на номер телефона тут слабое и я нашел в интернете более сложное, которое находит большую выборку.
Но, если я ему заменяю, то он перестается вообще искать. Что только не попробовал, все равно в итоге пустой столбец
Подскажите, пожалуйста, в чем именно может быть проблема и в какую сторону копать
Прикреплённый файлы:
parser1.py (2,8 KБ)
Офлайн
Исходный файл
Прикреплённый файлы:
2021-08-16_stom.csv (6,5 KБ)
Офлайн
Меняю вот на такое рв:
/^(\+)?(\(\d{2,3}\) ?\d|\d)((?\d)|( ?\(\d{2,3}\) ?)){5,12}\d$/
Офлайн
Это регулярка для перла
Офлайн
doza_andА как их отличать?
Это регулярка для перла
Офлайн
Nikita21zЛучше удали из номера пробелы и дефисы, а потом используй простое регулярное выражение для теста.
Меняю вот на такое рв:/^(\+)?(\(\d{2,3}\) ?\d|\d)((?\d)|( ?\(\d{2,3}\) ?)){5,12}\d$/
Офлайн
py.user.nextХмм, так я номера ищу на сайтах парсером, как я удалю дефисы и пробелы
Офлайн
Nikita21zПо слешам в начале и конце
А как их отличать?
Nikita21zА нам то откуда знать чего вы хотите?
А мне для чего нужна?
Nikita21zЕсли бы оно это делало то вы бы ничего не спрашивали. Вам дело советуют. Будьте проще, разбивайте задачу на подзадачи. Тогда вы сможете разобраться в более простой регулярке и поддерживать работоспособность своего кода.
так как оно очень универсальное и находит номера со всеми символами
Офлайн
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
Отредактировано py.user.next (Авг. 23, 2021 14:00:39)
Офлайн