使用Regex将域名插入url

时间:2017-09-08 17:59:52

标签: c# .net

我从数据库中提取文本,格式如下面的示例。我想在这个文本块中的每个URL前面插入域名。

<p>We recommend you check out the article 
<a id="navitem" href="/article/why-apples-new-iphones-may-delight-and-worry-it-pros/" target="_top">
Why Apple's new iPhones may delight and worry IT pros</a> to learn more</p>

因此,请注意上面的示例,我想将http://www.mydomainname.com/插入到URL中,使其显示为:

href="http://www.mydomainname.com/article/why-apples-new-iphones-may-delight-and-worry-it-pros/"

我想我可以使用正则表达式并将href =“替换为href =”http://www.mydomainname.com但这看起来并没有像我预期的那样工作。我应该尝试任何建议或更好的方法吗?

var content = Regex.Replace(DataBinder.Eval(e.Item.DataItem, "Content").ToString(), 
              "^href=\"$", "href=\"https://www.mydomainname.com/");

3 个答案:

答案 0 :(得分:1)

你可以使用正则表达式......

......但这对于这项工作来说非常错误。

Uri有一些方便的构造函数/工厂方法用于此目的:

Uri ConvertHref(Uri sourcePageUri, string href)
{
    //could really just be return new Uri(sourcePageUri, href);
    //but TryCreate gives more options...
    Uri newAbsUri;
    if (Uri.TryCreate(sourcePageUri, href, out newAbsUri))
    {
        return newAbsUri;
    }

    throw new Exception();
}

所以,说sourcePageUri

var sourcePageUri = new Uri("https://somehost/some/page");

我们的方法的输出,其中包含href的几个不同值:

https://www.foo.com/woo/har => https://www.foo.com/woo/har
/woo/har                    => https://somehost/woo/har
woo/har                     => https://somehost/some/woo/har

...所以它与浏览器的解释相同。完美,没有?

答案 1 :(得分:0)

试试这段代码:

var content = Regex.Replace(DataBinder.Eval(e.Item.DataItem, "Content").ToString(), 
              "(href=[ \t]*\")\/", "$1https://www.mydomainname.com/", RegexOptions.Multiline);

答案 2 :(得分:0)

使用html解析器,如CsQuery。

var html = "your html text here";
var path = "http://www.mydomainname.com";

CQ dom = html;
CQ links = dom["a"];

foreach (var link in links)
    link.SetAttribute("href", path + link["href"]);

html = dom.Html();