Регулярное выражение Python для телефонных номеров - PullRequest
0 голосов
/ 30 августа 2018

Я очень новичок в регулярных выражениях и ищу помощи, чтобы разобрать телефонные номера из текста HTML

На исходном сайте HTML-теги сильно искажены и не имеют уникальных селекторов, которые я могу использовать. Ниже, если список возможностей я ищу, чтобы разобрать.

raw = """+49 39291 55-217
02102 7007064
0152 01680970
+49 39291 55-216
02102 3802 22
0800 333004 451-100
+49 221 9937 26950
02151-47974510
+49(0)6105 937 -539
0211/409 2268
+49(0)6105 937 -539
+49211/584-623
0211 58422 2012
+49 (9131) 7-35335
+49 521 9488 2470
+ 49-40-70 70 84 - 0
0211 17 95 99 04
02151-47974327
+49 203 28900 1121
0211 9449-2555
+49 (5 41) 9 98 -2268"""

Я попробовал этот шаблон, но не смог разобрать больше

import re, requests

Phones = re.findall(re.compile(r'.*?(\(?\d{3}\D{0,3}\d{3}\D{0,3}\d{4}).*?'),raw)

phones
['102 7007064', '152 0168097', '151-4797451', '937 -539\n0211', '937 -539\n+4921', '584-623\n0211', '151-4797432']

Любой совет или помощь высоко ценится. Спасибо

1 Ответ

0 голосов
/ 30 августа 2018

Я предлагаю использовать этот шаблон:

(?:\B\+ ?49|\b0)(?: *[(-]? *\d(?:[ \d]*\d)?)? *(?:[)-] *)?\d+ *(?:[/)-] *)?\d+ *(?:[/)-] *)?\d+(?: *- *\d+)?

См. Демоверсию regex . Обратите внимание, что оно написано на основе вашего комментария , говорящего , номера телефонов начинаются с +49 или 0 и в списке примеров, которые вы предоставили. Это может рассматриваться как «работа в процессе», так как вы не предоставили более конкретные правила для извлечения номера телефона.

Детали шаблона

  • (?:\B\+ ?49|\b0) - a +, необязательный пробел, 49 или 0, обе подстроки не могут начинаться с слова char
  • (?: *[(-]? *\d(?:[ \d]*\d)?)? - необязательная подстрока, соответствующая 0+ пробелам, затем необязательная ( или -, 0+ пробел, цифра, а затем необязательная последовательность цифр / пробелов, за которой следует цифра
  • *(?:[)-] *)? - 0+ пробелов, а затем необязательная последовательность ) или - с последующими 0+ пробелами
  • \d+ - 1+ цифр
  • * - 0+ пробелов
  • (?:[/)-] *)? - необязательная последовательность /, ) или - с последующими 0+ пробелами
  • \d+ - 1+ цифр
  • *(?:[/)-] *)? - 0+ пробелов, а затем необязательная последовательность /, ) или - с последующими 0+ пробелами
  • \d+ - 1+ цифр
  • (?: *- *\d+)? - необязательная последовательность: 0+ пробелов, -, 0+ пробелов, 1+ цифр.
...