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

Sah*_*hir 1 c# regex asp.net-mvc

我有一个带有多个<p>标签的文本正文.我想在此文本正文中为每个P标记插入一个GUID.

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

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

Ale*_*kov 6

您正在寻找允许返回每个匹配的自定义结果的Regex.Replace(或其静态veriosn):

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

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

样品:

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

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