用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中设置标签,因为它会忽略替换的最后一个单词,我希望我是有意义的

用url替换字符串中出现的字符串

将找到的用户名保存在列表中。从最长到最短遍历这些,用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);
        }
    }