Я пытаюсь извлечь номера телефонов из многих файлов писем. Я написал код регулярного выражения для их извлечения, но получил результаты только для одного формата.

PHONERX = re.compile("(\d{3}[-\.\s]??\d{3}[-\.\s]??\d{4}|\(\d{3}\)\s*\d{3}[-\.\s]??\d{4}|\d{3}[-\.\s]??\d{4})")

phonenumber = re.findall(PHONERX,content)

Просмотрев данные, я обнаружил, что существует множество форматов телефонных номеров.

Как я могу извлечь все телефонные номера, которые имеют этот формат вместе:

800-569-0123
1-866-523-4176
(324)442-9843
(212) 332-1200
713/853-5620
713 853-0357
713 837 1749

Эта ссылка является образцом для набора данных. проблема заключается в том, что когда-то номера телефонов извлекают регулярное выражение из messageId и других номеров в письме © 0

1
Ash 24 Апр 2017 в 08:03

2 ответа

Лучший ответ

Вы можете использовать:

\(?(?:1-)?\b[2-9][0-9]{2}\)?[-. \/]?[2-9][0-9]{2}[-. ]?[0-9]{4}\b

Который будет соответствовать всем вашим примерам + игнорировать ложные срабатывания, например:

113 837 1749
222 2222 22222

Regex Demo и объяснение

Python Demo

0
Pedro Lobito 24 Апр 2017 в 05:20

Вам не нужно включать все возможности, используя логическое ИЛИ. Вы можете использовать следующее регулярное выражение:

(?:\(\d+\)\s?\d*|\d+)([-\/ ]\d+){1,3}

См. демо-версию

Для использования с re.findall() используйте не захваченную группу:

(?:\(\d+\)\s?\d*|\d+)(?:[-\/ ]\d+){1,3}
0
Kasramvd 24 Апр 2017 в 05:40