Я разработал Python регулярное выражение, которое получает телефонные номера из текста примерно в 90% случаев. Однако иногда случаются странные аномалии. Мой код выглядит следующим образом:
phone_pattern = re.compile(r'(\d{3}[-\.\s]\d{3}[-\.\s]\d{4}|\(\d{3}\)\s*\d{3}[-\.\s]\d{4}|\d{3}[-\.\s]\d{4})')
df['phone'] = df['text'].apply(lambda x: phone_pattern.findall(x))
df['phone']=df['phone'].apply(lambda y: '' if len(y)==0 else y)
df['phone'] = df['phone'].apply(', '.join)
Этот код извлекает номера телефонов и добавляет новый столбец под названием «телефон». Если число несколько, они разделяются запятой.
Следующий текст, однако, генерирует странный вывод:
university of blah school of blah blah blah (jane doe doe) 1234567890 1234 miller Dr E233 MILLER DR blah blah fl zipcode in the morning or maybe Monday.
Вывод, который мне дает мой текущий код:
890 1234
Вместо требуемого фактического числа из:
1234567890
Это происходит на нескольких примерах. Я пытался редактировать регулярное выражение, но это только ухудшает его. Любая помощь будет оценена. Кроме того, я думаю, что этот вопрос полезен, потому что многие телефонные регулярные выражения, предлагаемые в Stackoverflow, не сработали для меня.