C# 转换标记以链接到正则表达式



我有这样的文本:

我的文字

我的文字 bla bla bla 锦绣, [{~mykeyword|mylink~}], some 其他文本 [{~我的关键字 2|mylink2~}], bla bla 等...

我想用链接替换以[{~开头并以~}]结尾的所有部分,|链接和关键字分开。关键字可以有空间。

<a href="mylink">mykeyword</a><br>
<a href="mylink2">my keyword 2</a>

我构建了以下与任何结果都不匹配的函数:

public static string ConvertUrlsToLinks(string msg)
{
     string regex = @"([{~(^w+( +w+)*$)|(^w+( +w+)*$)~}])";
     Regex r = new Regex(regex, RegexOptions.IgnoreCase);
     return r.Replace(msg, "<a href="$1">$2</a>");
}

我想它来自正则表达式定义。

更新:评论中来自 Biffen 的正则表达式与我的函数配合良好。谢谢!

工作功能:

public static string ConvertUrlsToLinks(string msg)
{
     string regex = @"[{~(.*?)|(.*?)~}]";
     Regex r = new Regex(regex, RegexOptions.IgnoreCase);
     return r.Replace(msg, "<a href="$1">$2</a>");
}

将我的评论变成答案。

使用这个(更简单的)正则表达式:

[{~(.*?)|(.*?)~}]

它将捕获组 1 中的关键字和组 2 中的链接。"诀窍"是使用非贪婪。(并正确转义特殊字符。

你可以使用这个正则表达式来捕获 [{~yourtag~}]

[{~.*?~}]

腭状测试。您必须为 .NET 稍微修改一下。

最新更新