Я не уверен, что мое решение подойдет именно вам, но оно должно быть близко, я думаю ...
Использование может использовать «ForEach», определенный в MoreLinq, если вы предпочитаете (вместо моего ApplyForEachItem).
Так же, как ссылка, я использовал https://regex101.com/, чтобы сделать мои тесты reges, которые кажутся великолепными.
using System.IO;
using System.Linq;
using HtmlAgilityPack;
using System.Text.RegularExpressions;
using System.Diagnostics;
using System.Collections.Generic;
using System;
namespace SoQuestion
{
class Program
{
// 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 string phoneReg = @"\s+\d[ \d]+\r\n.+\r\n";
private static Regex phoneRegex = new Regex(phoneReg, RegexOptions.IgnoreCase);
public static void Main(string[] args)
{
HtmlDocument doc = new HtmlDocument();
doc.Load(@"C:\temp\HTMLPage1.html");
doc.DocumentNode.Descendants()
.Where(n => n.Name == "script" || n.Name == "style" || n.Name == "svg" || n.Name == "button"
|| n.Name == "li" || n.Name == "link" || n.Name == "img" || n.Name == "head" || n.Name == "header" || n.Name == "input")
.ToList()
.ForEach(n => n.Remove());
var phoneMatches = phoneRegex.Matches(doc.DocumentNode.InnerText);
List<Tuple<string, string>> data = new List<Tuple<string, string>>();
ApplyForEachItem(phoneMatches, match =>
{
int indexFirstDigit = match.Value.IndexOfAny(new char[]{'1', '2', '3', '4', '5', '6', '7', '8', '9', '0' });
string[] phoneAndDesc = match.Value.Substring(indexFirstDigit).Split("\r\n");
data.Add(new Tuple<string, string>(phoneAndDesc[0].Trim(), phoneAndDesc[1].Trim()));
});
ApplyForEachItem(data, item => Debug.Print($"Phone: '{item.Item1}', Desc = '{item.Item2}' \r\n"));
}
public static void ApplyForEachItem<T>(IEnumerable<T> enumerable, Action<T> action)
{
if (enumerable == null)
{
return;
}
foreach (T t in enumerable)
{
action(t);
}
}
}
}
Результат:
Phone: '1860 500 2277', Desc = '( Credit Card - From India )'
Phone: '1860 266 2667', Desc = '( Personal Banking - From India )'
Phone: '1860 500 2255', Desc = '( Personal Banking - From India )'
Phone: '1800 419 2266', Desc = '( Corporate Cards - From India )'
Phone: '1800 102 6922', Desc = '( Corporate Cards - From India )'
Phone: '1800 267 3456', Desc = '( HSBC Advance - From India )'
Phone: '1800 102 2208', Desc = '( HSBC Advance - From India )'
Phone: '1800 266 3456', Desc = '( HSBC Premier - From India )'
Phone: '1800 103 4722', Desc = '( HSBC Premier - From India )'
Phone: '022 66800001', Desc = '( Credit Card - From Overseas )'