2014-07-18 87 views
1

我有一個帶有多個<p>標籤的文本正文。我想爲每個出現在這個文本體內的P標籤插入一個GUID。使用新的GUID替換字符串中的子字符串找到每個子字符串

起初我這樣做text = text.Replace("<p>", "<p data-paragraph-id=" + Guid.NewGuid().ToString() + ">");

但是,正如你可以看到這將使相同的GUID爲每個p標籤的。我的問題是:如何爲P標籤的每次出現插入唯一的GUID?

+0

不好意思啊!感謝您的編輯! – Sahir

回答

5

您正在尋找Regex.Replace(或它的靜態veriosn),允許返回定製導致每場比賽:

字符串替換(字符串輸入,MatchEvaluator評估)

在指定的輸入字符串,替換由MatchEvaluator委託返回的字符串匹配指定正則表達式的字符串

樣品:

var result = Regex.Replace(text, "<p>", _ => 
     "<p data-paragraph-id=" + Guid.NewGuid().ToString() + ">"); 

備註:如果您嘗試修改HTML,請考慮使用HTMLAgilityPack進行閱讀並通過DOM添加屬性......比您可以使用的任何RegEx /字符串替換/連接更安全/更具可擴展性。

+0

有趣。我不知道HTMLAgilityPack。它看起來像我可以肯定使用的東西! – Sahir

+0

以前從未聽說過'Regex.Replace',有趣的是 – Cyral

+0

也許有一個小建議,那就是在結果中包含引號:''

「' –

1

這裏有一個LINQ的方法做你想要什麼:

var parts = 
    text 
     .Split(new string[] { "<p>" }, StringSplitOptions.None) 
     .SelectMany(x => new [] 
     { 
      x, 
      "<p data-paragraph-id=\"" + Guid.NewGuid().ToString() + "\">" 
     }) 
     .ToArray(); 

var result = String.Join("", parts.Take(parts.Length - 1)); 
相關問題