У меня есть регулярное выражение, соответствующее телефонным номерам:
import re
phones = re.findall(r'[+(]?[0-9][0-9 \-()]{8,}[0-9]', text)
Показывает хорошую точность в большом наборе необработанных текстов.
Но иногда оно соответствует нежелательным результатам (в диапазоне лет и случайные идентификаторы).
Диапазоны лет:
'2012 - 2017'
'(2011 - 2013'
'1999 02224'
'2019 2010-2015'
'2018-2018 (5'
'2004 -2009'
'1) 2005-2006'
'2011 2020'
Случайные идентификаторы:
'5 5 5 5'
'100032479008252'
'100006711277302'
У меня есть идеи, как решить эти проблемы.
- Ограничить общее количество цифр до 12 цифр.
- Ограничить общее количество символов до 16 символов.
- Удалить диапазоны лет (
19**|20** - 19**|20**
).
Но я не знаю, как реализовать эти идеи и делают их исключениями в моем регулярном выражении.
Некоторые примеры, которые регулярное выражение должно уловить, представлены ниже:
380-956-425979
+38(097)877-43-88
+38(050) 284-24-20
(097) 261-60-52
380-956-425979
(068)1850063
0975533222