使用找到的每个子字符串的新GUID替换字符串中的子字符串

时间:2014-07-18 02:53:53

标签: c# regex asp.net-mvc

我的文本正文包含多个<p>标记。我想在此文本正文中为每个P标记插入一个GUID。

最初我这样做text = text.Replace("<p>", "<p data-paragraph-id=" + Guid.NewGuid().ToString() + ">");

但是,正如您所看到的,这将为每个P标签添加相同的GUID。我的问题是:如何为每个P标签插入一个唯一的GUID?

2 个答案:

答案 0 :(得分:5)

您正在寻找允许为每场比赛返回自定义结果的Regex.Replace(或其静态veriosn):

  

string Replace(字符串输入,MatchEvaluator求值程序)

     

在指定的输入字符串中,将匹配指定正则表达式的所有字符串替换为MatchEvaluator委托返回的字符串

样品:

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

附注:如果您正在尝试修改HTML,请考虑使用HTMLAgilityPack读取并通过DOM添加属性...比任何RegEx /字符串替换/连接更安全/更可扩展,您可以提出。

答案 1 :(得分: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));