用我的链接替换字符串中的链接

时间:2018-08-13 06:40:39

标签: c# asp.net regex string url

我想用我要提供的链接替换字符串中的每个链接。我尝试过的是-

StreamReader reader = new StreamReader(dd1.SelectedItem.Value);
string readFile = reader.ReadToEnd();
Regex regx = new Regex("http(s)?://([\\w+?\\.\\w+])+([a-zA-Z0-9\\~\\!\\@\\#\\$\\%\\^\\&\\*\\(\\)_\\-\\=\\+\\\\\\/\\?\\.\\:\\;\\'\\,]*([a-zA-Z0-9\\?\\#\\=\\/]){1})?", RegexOptions.IgnoreCase);
string output=regx.ToString();
output = readFile;
MatchCollection matches = regx.Matches(output);

foreach (Match match in matches)
{
    output = output.Replace(@"match.Value", @"http://localhost:61187/two?" + "sender=" + Server.UrlEncode(this.txtUsername.Text) + "&reciever=" + output);
}

在这里,我有一个包含一些链接的字符串输出。因此,我已经使用正则表达式来解析字符串中的链接。但是,不会读取名为“输出”的字符串,并且该字符串既不显示错误也不显示输出。

1 个答案:

答案 0 :(得分:0)

在我看来,您应该改用regx.Replace(...)

StreamReader reader = new StreamReader(dd1.SelectedItem.Value);
string readFile = reader.ReadToEnd();
Regex regx = new Regex("http(s)?://([\\w+?\\.\\w+])+([a-zA-Z0-9\\~\\!\\@\\#\\$\\%\\^\\&\\*\\(\\)_\\-\\=\\+\\\\\\/\\?\\.\\:\\;\\'\\,]*([a-zA-Z0-9\\?\\#\\=\\/]){1})?", RegexOptions.IgnoreCase);
string output = regx.ToString();
output = readFile;
string username = Server.UrlEncode(this.txtUsername.Text);
output = regx.Replace(output, new MatchEvaluator((match) =>
{
    var url = Uri.EscapeDataString(match.Value);
    return $"http://localhost:61187/two?sender={username}&receiver={url}";
}));

这将用匿名函数返回的URL替换所有匹配项。