如何动态替换字符串的自定义标签?

时间:2015-08-02 16:49:07

标签: c# string replace

我在一个MSSQL表中保存了以下字符串:

"Inflicts [regular damage]{mechanic:regular-damage}."

我想替换[]内的所有内容,指向一个指向机制的链接:常规损坏,如下所示:

"Inflicts <a href=\"/Mechanics.aspx?Name=regular-damage\">regular damage</a>."

我怎么能这样做?提前谢谢。

1 个答案:

答案 0 :(得分:2)

你需要捕捉三件事 - 方括号的内容,冒号前的花括号的内容,以及花括号的其余内容。您可以使用此正则表达式执行此操作:

@"\[([^\]]+)\]{([^:]+):([^}]+)}"
//  ^^^^^^^^   ^^^^^^^ ^^^^^^^
//  Group$1    Group$2 Group$3

通过捕获这三个组,您可以使用此替换模板格式化答案:

@"<a href=""$2.aspx?Name=$3"">$1</a>"

总而言之,你得到了

var s = @"Inflicts [regular damage]{mechanic:regular-damage}.";
var r = Regex.Replace(
    s
,   @"\[([^\]]+)\]{([^:]+):([^}]+)}"
,   @"<a href=""$2.aspx?Name=$3"">$1</a>"
);

这会产生

Inflicts <a href="mechanic.aspx?Name=regular-damage">regular damage</a>.

Demo.