5

文字列の配列があり、配列内のアイテムと指定された文字列のすべての一致にハイパーリンクを追加する必要があります。主にウィキペディアのようなもの。

何かのようなもの:

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

{            }

string p = "The Domesday Book records the manor of Greenwich as held by Bishop Odo of Bayeux; his lands were seized by the crown in 1082. A royal palace, or hunting lodge, has existed 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 of Greenwich as held by Bishop <a href = "#odo of bayeux">Odo of Bayeux</a>; his lands were seized by the crown in 1082. A royal palace, or hunting lodge, has existed here since before 1300, when <a href = "#edward">Edward<a/> I is known to have made offerings at the chapel of the Virgin Mary.";

それを行う最善の方法は何ですか?

4

1 に答える 1

5

おそらく、次のように非常に簡単に実行できます。

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

アンカーの大文字化が一致したテキストと同じである場合は、for ループを取り除くこともできます。

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

パターンは になりDomesday book|Odo of Bayeux|Edward、大文字と小文字に関係なく一致が検出され、検出されたものはすべてリンク テキストと属性の両方に戻されhrefます。

于 2012-11-17T22:00:11.947 に答える