/ / Parse International Телефонни номера от уеб страници - c #, regex, html-agility-pack, телефонен номер

Parse International Телефонни номера от уеб страници - c #, regex, html-agility-pack, телефонен номер

Използвам 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 абстракция от пакета html agility. Проблемът е, че не съответства на някои телефонни номера 08450 211 211 и +44 (0) 1246 733 000.

Има ли изрично регенериран израз, който е най-подходящ при обхождане на уеб сайтове и позволява съвпадение на повечето форми на международни телефонни номера?

Отговори:

1 за отговор № 1

Не можете да съответствате на тези телефонни номера (08450 211 211 и +44 (0) 1246 733 000), защото вашият регекс просто не ги съвпада.

Първото нещо, което трябва да направите, когато пишете регулярен израз, е за да идентифицирате модела, който искате да съответства.

Така че, моето предложение е да напишете a списък на различните формати на телефонни номера, актуализирайте въпроса си, и тогава ще можем да ви помогнем. В противен случай винаги ще създам нов телефонен номер, който може да не съвпада с вашия регекс, или просто ще съвпадне повече, отколкото искате.

Тук е регекс, който ще съответства на горните телефонни номера:

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

Редактиране:

Според коментара ви, бих използвал този регекс и след това да премахна тези, които не са телефонни номера:

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