之前写的用分割方法没看到发问人说测试效率如何,恰好又重写了,不知效率如何,这里封装操作公共变量给初学参考吧。
string 文章 = @"我想学习C语言教程,我想看的是C语言视频教程,<\></><->我喜欢C语言,我想习学<a href='http://www.21shipin.com' target='_blank' title='C语言教程'>C语言教程</a>,其它什么C语言教程,我都不想看。";
string[] 匹配 = { "C语言视频教程", "C语言教程", "C语言" },/*如果字符串有重复,文字多者排先,区分大小写*/
超链 = { "a1.html", "a2.html", "a3.html" }, 内容 = new string[0];
Action 还原 = delegate
{
文章 = 内容[0];/*不用传参及返回,直接操作公共变量*/
foreach (var 文 in Enumerable.Range(1, 内容.Length - 1))
文章 += "<" + 内容[文];
};
foreach (var 配 in Enumerable.Range(0, 超链.Length))
{
string 替 = @"<a href='" + 超链[配] + "' target='_blank' title='" + 匹配[配] + "'>" + 匹配[配] + "</a>";
if (内容.Length == 0)
内容 = 文章.Split("<"[0]);
else
{
还原();
内容 = 文章.Split("<"[0]);/*替换后重新分割数组是动态的*/
}
foreach (var 容 in Enumerable.Range(0, 内容.Length))
if (!内容[容].Contains(@"href='"))
内容[容] = 内容[容].Replace(匹配[配], 替);
}
//还原();
//Console.WriteLine(文章);
Console.WriteLine(string.Join("<", 内容));
不看封装操作变量的话,处理代码:
foreach (var 配 in Enumerable.Range(0, 超链.Length))
{
string 替 = @"<a href='" + 超链[配] + "' target='_blank' title='" + 匹配[配] + "'>" + 匹配[配] + "</a>";
内容 = (内容.Length == 0) ? 文章.Split("<"[0]): string.Join("<", 内容).Split("<"[0]);
foreach (var 容 in Enumerable.Range(0, 内容.Length))
if (!内容[容].Contains(@"href='"))
内容[容] = 内容[容].Replace(匹配[配], 替);
}
Console.WriteLine(string.Join("<", 内容));