为找到的每个子字符串用新的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 ?

为找到的每个子字符串用新的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));