Ich verwende HtmlAgilityPack zum Parsen der Webseiten. Sobald das Dokument geladen ist, möchte ich die möglichen Telefonnummern aus HTML extrahieren. Zurzeit verwende ich einen Regex für diesen Zweck. Ich habe folgendes Stück Code, der nach der Übereinstimmung der Telefonnummern in der Webseite sucht
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);
Wo doci
ist HtmlDocument
Abstraktion von HTML Agilität Paket. Das Problem ist, dass einige Telefonnummern wie 08450 211 211
und +44 (0) 1246 733 000
nicht übereinstimmen.
Gibt es einen generischen Regex-Ausdruck, der am besten zum Crawlen von Websites geeignet ist und den Abgleich der meisten internationalen Rufnummern ermöglicht?
Sie können diese Telefonnummern nicht 08450 211 211
( 08450 211 211
und +44 (0) 1246 733 000
), weil Ihre Regex ihnen einfach nicht entspricht.
Das erste, was Sie tun müssen, wenn Sie einen regulären Ausdruck schreiben, ist das zu identifizierende Muster zu identifizieren .
Also, mein Vorschlag ist, eine Liste der verschiedenen Telefonnummern-Formate aufzuschreiben, Ihre Frage zu aktualisieren , und dann können wir Ihnen helfen. Sonst werde ich immer eine neue Telefonnummer erstellen, die Ihre Regex möglicherweise nicht abgleicht, oder sie passt nur mehr als Sie wollen.
Hier ist eine Regex, die den obigen Telefonnummern entspricht:
(?:\+\d+\s+\(\d+\)\s+)?\d{4,5}\s+\d{3}\s+\d{3}
Bearbeiten:
Laut Ihrem Kommentar würde ich einfach diese Regex verwenden und dann diejenigen entfernen, die keine Telefonnummern sind:
(?:\+\d+\s+\(\d+\)\s+)?[\d -]+