用url替换字符串中出现的字符串
本文关键字:字符串 替换 url | 更新日期: 2023-09-27 17:53:49
你好,我有一些文本是要显示在一个标签。
"嘿,@ronald和@tom这个周末我们去哪里?"
我需要做的是把它改成这个
"嘿www.domain.com/ronald和www.domain.com/tom我们周末去哪里?"
现在我有这段代码,有人离开stackoverflow已经帮助我构建,但我失去了在下一步该做什么。
Regex regex = new Regex(@"@['S]+");
MatchCollection matches = regex.Matches(strStatus);
foreach (Match match in matches)
{
string Username = match.ToString().Replace("@", "");
}
我不能在foreach中设置标签,因为它会忽略替换的最后一个单词,我希望我是有意义的
将找到的用户名保存在列表中。从最长到最短遍历这些,用www.domain.com/[username]替换每次出现的@[username]。从长到短的原因是为了避免替换部分匹配,如"嘿,@tom和@tomboy……"这当然不是进行替换的最有效的方法(因为您对每个用户名都进行了完整的字符串扫描),但是考虑到您的示例,我怀疑您的字符串很短,而且效率的缺乏比这种机制的简单性更重要。
var usernames = new List<string>();
Regex regex = new Regex(@"@['S]+");
MatchCollection matches = regex.Matches(strStatus);
foreach (Match match in matches)
{
usernames.Add( match.ToString().Replace("@", "") );
}
// do longest first to avoid partial matches
foreach (var username in usernames.OrderByDescending( n => n.Length ))
{
strStatus = strStatus.Replace( "@" + username, "www.domain.com/" + username );
}
如果你想构建实际的链接,它看起来像:
strStatus = strStatus.Replace( "@" + username,
string.Format( "<a href='http://www.domain.com/{0}'>@{0}</a>", username ) );
string strStatus = "Hey @ronald and @tom where are we going this weekend";
Regex regex = new Regex(@"@['S]+");
MatchCollection matches = regex.Matches(strStatus);
foreach (Match match in matches)
{
string Username = match.ToString().Replace("@", "");
strStatus = regex.Replace(strStatus, "www.domain.com/" + Username, 1);
}
}