2011-02-28 101 views
1

我對C#和ASP.NET開發非常非常新。如何將文本轉換爲C#中的超鏈接?

我想要做的是找到並替換出現在網頁正文中的某些詞。每當某個單詞出現在正文中時,我想將該單詞轉換爲鏈接到我們網站上另一頁的超鏈接。

我不知道該從哪裏開始。我發現了在C#中執行查找和替換的代碼,但是我沒有找到任何幫助,只是通過閱讀文檔,查找某些字符串並將其更改爲不同的字符串。

+0

所以,你要在運行時做到這一點? – 2011-02-28 14:15:39

+0

我有一個問題是身體文本來自哪裏?如果它來自數據庫,那麼你可以通過簡單的擴展方法來運行它。如果它是頁面上的靜態文本,則需要一個不同的計劃。 – mark123 2011-02-28 14:37:07

+0

它是靜態的。它被硬編碼到頁面中,網站後面沒有數據庫。 – EmilyM 2011-02-28 14:41:46

回答

1

在文檔中查找單詞或文本的最佳作業是使用正則表達式。如果你是新手,那麼如果你打算讓你的項目具有高性能,我肯定會推薦你通過它。

您可能還想在互聯網上搜索Wiki API,它可以幫助您構建解決方案,而不必重新創造溫水。

我很確定下面的鏈接可以讓你開始學習正則表達式。下載表達測試儀並稍微玩一下。

http://www.radsoftware.com.au/articles/regexlearnsyntax.aspx

+0

謝謝,這是一個很大的幫助! – EmilyM 2011-02-28 14:48:12

+0

非常歡迎。我總是認爲自己學習更好,而不是像空頭猴那樣複製/粘貼代碼。 – 2011-02-28 14:53:20

+0

嗯,我不想複製粘貼,但我處於一個嚴重的時間緊迫和緊迫的截止日期,而且我是一名PHP開發人員,基本上在一週之內努力學習有關.NET的所有內容,所以還有更多的幫助可以幫助您給我會是驚人的。 – EmilyM 2011-02-28 14:54:43

3

一對夫婦的方式來做到這一點。

string text = "We the People of the United States, in Order to form a more perfect Union, establish Justice, insure domestic Tranquility, provide for the common defence, promote the general Welfare, and secure the Blessings of Liberty to ourselves and our Posterity, do ordain and establish this Constitution for the United States of America."; 

string augmentedText = text.Replace("provide", "<a href='#provide'>provide</a>"); 

您也可以使用正則表達式來完成此操作。

這裏的每一個字轉換爲大寫的例子:

public static string MatchEval(Match m) 
{ 
    return m.ToString().ToUpper(); 
} 

static void Main(string[] args) 
{ 
    string text = "This is some sample text."; 

    Console.WriteLine(text); 

    string result = Regex.Replace(text, @"\w+", new MatchEvaluator(MatchEval)); 

    Console.WriteLine(result); 
} 

希望這有助於......祝你好運!

+2

+1,用於引用整個序言:) – 2011-02-28 14:22:53

+0

沒有必要運行正則表達式來簡單地將單詞或短語替換爲另一個單詞或短語。似乎是沒有任何好處的大量開銷。替換。這個問題還不夠明確,儘管如此。 +1序言! :D – mark123 2011-02-28 14:34:21

+0

另外,如果有一個要替換的單詞列表,使用Linq,特別是.Aggregate()方法是個好主意。 – mark123 2011-02-28 14:40:33

0

它看起來像你想要做的是使一個C#應用程序打開文件,並查看源代碼。

您可能需要使用正則表達式來獲取要替換的文本的最佳匹配,在編寫此文件時還需要謹慎,以確保它只替換整個單詞,例如,如果您想創建一個鏈接爲湯姆這個詞,帶你到湯姆斯頁面,你不希望這個創建明天的話鏈接等。

基本上我認爲邏輯是發現前後有空格的單詞,並將其替換爲超鏈接。

當你第一次看它時,正則表達式可能有點令人生畏,但是一旦你擁有了你的表達式,這是一種非常強大的方式來執行這種事情。

+0

謝謝我絕對會看正則表達式!我甚至沒有想過用錯誤替換其他詞的部分! – EmilyM 2011-02-28 14:49:10

+0

我可能會提出的另一個建議是,如果您要使用它來更新文件,請首先將應用程序的副本轉儲到另一個目錄中,以作爲預防措施。 – Purplegoldfish 2011-02-28 14:56:40

0

如果你有一些特殊的話,我們一般使用像[NAME],[CLASS]識別文本,然後執行以下一些特殊的文字,

  1. 閱讀HTML,ASPX文件,TextReader的類。
  2. 認爲,一個字符串內整個文本,並開始串.replace(「[名稱]」,@「...」)......將是必需的屬性,
  3. 重新寫的文字一些新的一頁具有相同的擴展名。
+0

我不會推薦這個解決方案,因爲它需要處理器時間來計算整個字符串,更不用說在一個變量內部保存10頁長的文本非常耗費內存。此外,如果需要在文本內部替換新的單詞,則整個文本將再次需要被搜索並寫入另一個頁面。 – 2011-02-28 14:33:14

+0

是的,它似乎有點耗費內存。我應該提到,每個頁面上都會包含許多不同的關鍵字,因此每個關鍵字的重複過程都會一次又一次地發生 - 每個頁面有幾十次不同的單詞。另外,我們的大部分網頁都非常冗長,文字沉重。 – EmilyM 2011-02-28 14:38:03

+0

然後正則表達式是要走的路。另外,像上面提到的那樣,查看Wiki的一些內容。 – 2011-02-28 14:54:59

0

好了艾米麗,幫助你在你的短期限一點:

閱讀有關如何獲取代碼隱藏身體的HTML內容下面的文章: http://west-wind.com/weblog/posts/481.aspx

讓我們假設你已經存儲在名爲_pageContent

變量渲染()輸出我使用任何正則表達式現在,因爲我沒有正確地認爲一個人的時候我。你可以自己玩一下。下面的鏈接可以指向你的方向:Regex to match multiple strings

public static void ChangeWordsToLinks() 
{ 
    Dictionary<string, string> _wordLinkCollection = new Dicationary<string, string>(); 
    // fill the collection which will replace words by links here 
    // Additionally you can fetch this from a database and loop 
    // through a DataTable to fill this collection 
    _wordLinkCollection.add("foo", "http://www.foobar.com"); 
    _wordLinkCollection.add("bar", "http://www.barfoo.com"); 

    // this is lazy code and SHOULD be optimized to a single RegExp string. 
    foreach(KayValuePair<string, string> pair in _wordLinkCollection) 
    { 
    _pageContent.Replace(String.Format(" {0} ", pair.Key), 
     String.Format("<a href='{0}'>{1}</a>", pair.Value, pair.Key)); 
    } 
} 

高興,如果我能有所幫助,您

相關問題