2012-09-20 66 views
0

我已經閱讀了一個html文件作爲字符串builder.Now我想要在h1,h2和h3之間放置錨標籤並給出不同的id和href鏈接。那麼我怎麼能做到這一點。我想要做下面的事情。 我試過Sb.Replace("<h1>", "<h1> <a id=1>");,但我不能給uniqe Id錨標籤。所以我怎麼讀取所有h1,h2和h3,並把錨標籤,並給錨標籤唯一的id。StringBuilder查找字符串讀取和替換

+0

你不能在一擊中做到這一點。使用RegEx可能會更好,然後一次更換1並遞增您的ID。 – lahsrah

+0

謝謝,但我怎樣才能找到從stringbuilder的所有h1,h2和h3? – Hitesh

+2

[HtmlAgilityPack](http://htmlagilitypack.codeplex.com/) –

回答

1

您可以在System.Text.RegularExpressions名稱空間中調用Regex.Replace,並在您分配新ID的位置定義一個自定義MatchEvaluator回調。

類似以下內容:

var regHeaders = new Regex(@"<(?<close>/)?h(?<header>\d)\s*>", RegexOptions.Compiled | RegexOptions.IgnoreCase); 
var replaced = regHeaders.Replace(sb.ToString(), new MatchEvaluator(EvaluateHeaders)); 

,並定義EvaluateHeaders回調是這樣的:

private static string EvaluateHeaders(Match m) 
{ 
    bool closeTag = m.Groups["close"].Success; 
    switch (int.Parse(m.Groups["header"].Value)) 
    { 
     case 1: // h1 
      return closeTag ? "</a></h1>" : "<h1><a href=\"header1\">Header1"; 
     // todo: your own implementation of the various other headers. 
     default: 
      return m.Value; 
    } 
} 

編輯
在你最新的評論來看,我已經改變了代碼如下:

var regHeaders = new Regex(@"<h(?<header>\d)\s*>(?<content>.+?)</h\1>", RegexOptions.Compiled | RegexOptions.IgnoreCase | RegexOptions.Singleline); 
var replaced = regHeaders.Replace(sb.ToString(), EvaluateHeaders); 

private static string EvaluateHeaders(Match m) 
{ 
    switch(int.Parse(m.Groups["header"].Value)) 
    { 
     case 1: // <h1>content</h1> 
      return string.Format("<h1><a href=\"#\" id=\"{0}\">{0}</a><h1>", m.Groups["content"].Value); 
     default: 
      return m.Value; 
    } 
} 
+0

謝謝你的回覆它的工作正常,但我怎樣才能給每個錨標籤唯一的ID。 – Hitesh

+0

ID的格式是什麼? –

+0

現在我想錨點id不同然後使用int變量。我想要錨點的id如下:例如:

測試

所以我想要類似

Test

。簡而言之,我的錨點ID將是我的內容之間h1,h2和h3 tag.Thanks – Hitesh