为找到的每个子字符串用新的GUID替换字符串中的子字符串
本文关键字:字符串 GUID 替换 | 更新日期: 2023-09-27 18:13:22
我有一个具有多个<p>
标记的文本体。我想在这个文本体中为P标记的每次出现插入一个GUID。
一开始我写的是text = text.Replace("<p>", "<p data-paragraph-id=" + Guid.NewGuid().ToString() + ">");
但是,正如您所看到的,这会为每个p标记放置相同的GUID。我的问题是:如何为P标记的每次出现插入唯一的GUID ?
您正在寻找正则表达式。替换(或其静态版本),允许为每个匹配返回自定义结果:
示例:替换(字符串输入,MatchEvaluator评估器)
在指定的输入字符串中,用MatchEvaluator委托返回的字符串替换所有匹配指定正则表达式的字符串
var result = Regex.Replace(text, "<p>", _ =>
"<p data-paragraph-id=" + Guid.NewGuid().ToString() + ">");
旁注:如果你试图修改HTML考虑阅读htmllagilitypack和添加属性通过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));