Parse International Номера телефонов с веб-страниц

c# html-agility-pack phone-number regex

Вопрос

Я использую HtmlAgilityPack для анализа веб-страниц. После загрузки документа я хочу извлечь возможные номера телефонов из HTML. В настоящее время для этой цели я использую некоторое регулярное выражение. У меня есть следующий код, который проверяет соответствие номеров телефонов на веб-странице

    private static string phoneReg =
                @"[\+]{0,1}(\d{10,13}|[\(][\+]{0,1}\d{2,}[\13)]*\d{5,13}|\d{2,6}[\-]{1}\d{2,13}[\-]*\d{3,13})";
            private static Regex phoneRegex = new Regex(phoneReg, RegexOptions.IgnoreCase);
var phoneMatches = phoneRegex.Matches(doci.DocumentNode.InnerText);

где doci - HtmlDocument абстракция HtmlDocument из пакета agility html. Проблема в том, что он не соответствует некоторым телефонным номерам, таким как 08450 211 211 и +44 (0) 1246 733 000 .

Существует ли общее выражение регулярного выражения, которое наиболее подходит при обходе сайтов и позволяет сопоставлять большинство форм международных телефонных номеров?

Принятый ответ

Вы не можете сопоставить эти номера телефонов ( 08450 211 211 и +44 (0) 1246 733 000 ), потому что ваше регулярное выражение просто не соответствует им.

Первое, что вам нужно сделать при написании регулярного выражения, - это определить шаблон, который вы хотите сопоставить .

Итак, мое предложение - записать список различных форматов телефонных номеров , обновить свой вопрос , а затем мы сможем вам помочь. В противном случае я всегда создам новый номер телефона, который может не совпадать с вашим регулярным выражением, или он будет соответствовать только тому, что вам нужно.

Вот регулярное выражение, которое будет соответствовать указанным выше номерам телефонов:

(?:\+\d+\s+\(\d+\)\s+)?\d{4,5}\s+\d{3}\s+\d{3}

Редактировать:

Согласно вашему комментарию, я бы просто использовал это регулярное выражение, а затем удалил те, которые не являются номерами телефонов:

(?:\+\d+\s+\(\d+\)\s+)?[\d -]+


Лицензировано согласно: CC-BY-SA with attribution
Не связан с Stack Overflow
Является ли этот КБ законным? Да, узнайте, почему
Лицензировано согласно: CC-BY-SA with attribution
Не связан с Stack Overflow
Является ли этот КБ законным? Да, узнайте, почему