2012-11-17 9 views
5

Mam tablicę ciągów i muszę dodać hiperłącze do każdego pojedynczego dopasowania elementu w tablicy i podanego ciągu. Zasadniczo coś jak w Wikipedii.Jak zrobić programowo tekst HTML za pomocą hiperłączy jak w Wikipedii?

Coś jak:

private static string AddHyperlinkToEveryMatchOfEveryItemInArrayAndString(string p, string[] arrayofstrings) 

{   } 

string p = "The Domesday Book records the manor of Greenwich as held by Bishop Odo ofBayeux; his lands were seized by the crown in 1082. A royal palace, or hunting lodge, hasexisted here since before 1300, when Edward I is known to have made offerings at the chapel of the Virgin Mary.";

arrayofstrings = {"Domesday book" , "Odo of Bayeux" , "Edward"}; 

returned string = @"The <a href = "#domesday book">Domesday Book</a> records the manor ofGreenwich as held by Bishop <a href = "#odo of bayeux">Odo of Bayeux</a>; his lands wereseized by the crown in 1082. A royal palace, or hunting lodge, has existed here sincebefore 1300, when <a href = "#edward">Edward<a/> I is known to have made offerings at thechapel of the Virgin Mary.";

Jaki jest najlepszy sposób to robić?

+1

Wikipedia nie robi tego automatycznie. Musisz określić, gdzie znajdują się linki, nawet jeśli możesz to zrobić, używając prostego, konkretnego znacznika zamiast pełnego HTML. – GolezTrol

Odpowiedz

5

prawdopodobnie można dość łatwo zrobić to tak:

foreach(string page in arrayofstrings) 
{ 
    p = Regex.Replace(
     p, 
     page, 
     "<a href = \"#" + page.ToLower() + "\">$0</a>", 
     RegexOptions.IgnoreCase 
    ); 
} 
return p; 

Jeśli kapitalizacja kotwicy może być taka sama jak dopasowanego tekstu, można nawet pozbyć się na pętli:

return Regex.Replace(
    p, 
    String.Join("|", arrayofstrings), 
    "<a href = \"#$0\">$0</a>", 
    RegexOptions.IgnoreCase 
); 

Teraz wzór staje się , dopasowania są znalezione niezależnie od wielkich liter, a to, co zostanie znalezione, jest umieszczane zarówno w tekście łącza, jak i w atrybucie href.

Powiązane problemy