我有一堆文本,其中可以包含以下格式的自定义标记:
[MYLINK ID="1234" URL="http://mywebsite.com" TEXT="Website link"]
文本可以包含多个链接。我想做的是将标签转换为普通的html链接,并获取C#代码中的ID。由此产生的替换标签应采用以下格式:
<a href="http://mywebsite.com?id=1234">Website link</a>
因此,为了澄清,如果我有以下大块文本:
This is a test [MYLINK ID="1234" URL="http://mywebsite.com" TEXT="website link"] with some more text and [MYLINK ID="2345" URL="http://mywebsite2.com" TEXT="another link"] here too.
它应该翻译成:
This is a test <a href="http://mywebsite.com?id=1234">website link</a> with some more text and <a href="http://mywebsite2.com?id=2345">another link</a> here too.
编辑:在过去的几个小时里,我一直在与Regex周旋,并设法获得了符合标签的以下内容,但不知道下一步该怎么办。。。
[MYLINK ID="(.*?)" URL="(.*?)" TEXT="(.*?)"]
如有任何帮助,我们将不胜感激。干杯,
如果属性始终按照您显示的顺序,则可以使用
var text = "[MYLINK ID="1234" URL="http://mywebsite.com" TEXT="Website link"]";
var pattern = "\[MYLINK\s+ID="([^"]*)"\s+URL="([^"]*)"\s+TEXT="([^"]*)"]";
var replacement = "<a href="$2?id=$1">$3</a>";
var result = Regex.Replace(text, pattern, replacement, RegexOptions.IgnoreCase);
// => <a href="http://mywebsite.com?id=1234">Website link</a>
请参阅.NET regex演示和C#演示。
详细信息:
[MYLINK
-[MYLINK
文本s+
-任意一个或多个空白ID="
-ID="
文本([^"]*)
-组1($1
(:除"
之外的零个或多个字符"s+URL="
-"
,一个或多个空白,URL="
文本([^"]*)
-第2组($2
(:除"
之外的零个或多个字符"s+TEXT="
-"
,一个或多个空白,TEXT="
文本([^"]*)
-第3组($3
(:除"
之外的零个或多个字符"]
-"]
文本
谢谢-我确实是在你发帖的时候收到的,做了一些非常类似的事情。。。
string pattern = @"[MYLINK ID=""(.*?)"" URL=""(.*?)"" TEXT=""(.*?)""]";
text = Regex.Replace(text, pattern, x => $"<a href='{x.Groups[2].Value}?id={x.Groups[1].Value}'>{x.Groups[3].Value}</a>");