using System.Collections.Generic;
using System.Text.RegularExpressions;
private static readonly Dictionary<string, string> ShippingVendorTrackingUrls = new Dictionary<string, string>(StringComparer.OrdinalIgnoreCase)
{"AMAZONSHIPPING", "https://track.amazon.co.uk/tracking/##TRACKINGNUMBER##"},
{"AUSPOSTCORP", "https://auspost.com.au/mypost/track/#/details/##TRACKINGNUMBER##"},
{"DEUTSCHEPOST", "https://webtrack.dhlglobalmail.com/?trackingnumber=##TRACKINGNUMBER##"},
{"DHL", "https://www.dhl.com/en/express/tracking.html?AWB=##TRACKINGNUMBER##&brand=DHL"},
{"DHLUSDIRECT", "https://www.logistics.dhl/us-en/home/tracking/tracking-ecommerce.html?submit=1&tracking-id=##TRACKINGNUMBER##"},
{"DPD", "https://www.dpd.co.uk/apps/tracking/?reference=##TRACKINGNUMBER##"},
{"ENDICIA", "https://www.endicia.com/status/?PIC=##TRACKINGNUMBER##"},
{"FEDEX", "https://www.fedex.com/apps/fedextrack/?action=track&trackingnumber=##TRACKINGNUMBER##"},
{"GFS", "https://seeker.justshoutgfs.com/ConsLinkv2.asp?ConsNumber=##TRACKINGNUMBER##&x=38&y=12&DSN_Tracking=1"},
{"INTERLINK", "https://www.dpdlocal-online.co.uk/tracking/##TRACKINGNUMBER##"},
{"MYHERMES", "https://new.myhermes.co.uk/track.html#/parcel/##TRACKINGNUMBER##/details"},
{"PARCELFORCE", "https://www.parcelforce.com/track-trace?trackNumber=##TRACKINGNUMBER##"},
{"ROYALMAIL", "https://www.royalmail.com/track-your-item#/tracking-results/##TRACKINGNUMBER##"},
{"ROYALMAILTRACKED", "https://www.royalmail.com/track-your-item#/tracking-results/##TRACKINGNUMBER##"},
{"SPRING", "https://postnl.post/details/?barcode=##TRACKINGNUMBER##"},
{"STAMPSCOM", "https://www.stamps.com/shipstatus/?confirmation=##TRACKINGNUMBER##"},
{"UPS", "https://www.ups.com/track?tracknum=##TRACKINGNUMBER##"},
{"YODEL", "https://www.yodel.co.uk/tracking/##TRACKINGNUMBER##"},
public static void Main()
Console.WriteLine("Match 1: " + BestMatchOrDefault("Deutsch Post", @"[A-Za-z0-9&]+", ShippingVendorTrackingUrls.Keys));
Console.WriteLine("Match 2: " + BestMatchOrDefault("De_Post", @"[A-Za-z0-9&]+", ShippingVendorTrackingUrls.Keys));
Console.WriteLine("Match 3: " + BestMatchOrDefault("ROYAL MAIL", @"[A-Za-z0-9&]+", ShippingVendorTrackingUrls.Keys));
private static string BestMatchOrDefault(string input, string pattern, IEnumerable<string> items)
var matches = new Dictionary<string, int>();
foreach (string item in items)
foreach (Match match in Regex.Matches(input, pattern))
if (item.IndexOf(match.Value, StringComparison.InvariantCultureIgnoreCase) >= 0)
if (!matches.ContainsKey(item))
if (matches.Values.Where(v => v == matches.Values.Max()).Count() == 1)
return matches.Aggregate((l, r) => l.Value > r.Value ? l : r).Key;