我有一個帶有多個<p>
標籤的文本正文。我想爲每個出現在這個文本體內的P標籤插入一個GUID。使用新的GUID替換字符串中的子字符串找到每個子字符串
起初我這樣做text = text.Replace("<p>", "<p data-paragraph-id=" + Guid.NewGuid().ToString() + ">");
但是,正如你可以看到這將使相同的GUID爲每個p標籤的。我的問題是:如何爲P標籤的每次出現插入唯一的GUID?
我有一個帶有多個<p>
標籤的文本正文。我想爲每個出現在這個文本體內的P標籤插入一個GUID。使用新的GUID替換字符串中的子字符串找到每個子字符串
起初我這樣做text = text.Replace("<p>", "<p data-paragraph-id=" + Guid.NewGuid().ToString() + ">");
但是,正如你可以看到這將使相同的GUID爲每個p標籤的。我的問題是:如何爲P標籤的每次出現插入唯一的GUID?
您正在尋找Regex.Replace(或它的靜態veriosn),允許返回定製導致每場比賽:
字符串替換(字符串輸入,MatchEvaluator評估)
在指定的輸入字符串,替換由MatchEvaluator委託返回的字符串匹配指定正則表達式的字符串
樣品:
var result = Regex.Replace(text, "<p>", _ =>
"<p data-paragraph-id=" + Guid.NewGuid().ToString() + ">");
備註:如果您嘗試修改HTML,請考慮使用HTMLAgilityPack進行閱讀並通過DOM添加屬性......比您可以使用的任何RegEx /字符串替換/連接更安全/更具可擴展性。
這裏有一個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));
不好意思啊!感謝您的編輯! – Sahir