C# 正则表达式-添加目标=";“空白”;对所有人<;a>;标记我的内容中的链接

C# 正则表达式-添加目标=";“空白”;对所有人<;a>;标记我的内容中的链接,c#,regex,C#,Regex,有人能帮我在C#.net中创建一个正则表达式,将target=“\u blank”添加到我的内容中的所有标记链接中吗 如果链接已设置目标,则将其替换为“\u blank”。目的是在新窗口中打开“我的内容”中的所有链接 谢谢你的帮助 -dotnetrocksRegEx.Replace(inputString,“]+)>”,“”) RegEx.Replace(inputString, "<(a)([^>]+)>", "<$1 target=""_blank""$2>")

有人能帮我在C#.net中创建一个正则表达式,将
target=“\u blank”
添加到我的内容中的所有
标记链接中吗

如果链接已设置目标,则将其替换为
“\u blank”
。目的是在新窗口中打开“我的内容”中的所有链接

谢谢你的帮助

-dotnetrocks

RegEx.Replace(inputString,“]+)>”,“”)
RegEx.Replace(inputString, "<(a)([^>]+)>", "<$1 target=""_blank""$2>")

关于这一点有很多提及,因此您可以使用:

HtmlDocument document = new HtmlDocument();
document.LoadHtml(yourHtml);

var links = document.DocumentNode.SelectNodes("//a");
foreach (HtmlNode link in links)
{
    if (link.Attributes["target"] != null)
    {
        link.Attributes["target"].Value = "_blank";
    }
    else
    {
        link.Attributes.Add("target", "_blank");
    }
}
这将向文档中的所有锚点添加(或在必要时替换)
target=''blank'

RegEx.replace(inputString,“]+)>”,“)
RegEx.Replace(inputString, "<(a)([^>]+)>", "<$1 target=""_blank""$2>")

它还将把target添加到那些已经有target存在的锚定标签中

我使用了一种类似于Alex展示的方法的扩展方法来实现这一点。方法:

// Return the input string with all parsed HTML links having the "target" attribute set to specified value
// Links without a target attribute will have the attribute added, existing attributes values are updated
public static string SetHtmlLinkTargetAttribute(this string inputHtmlString, string target)
{
    var htmlContent = new HtmlDocument();
    htmlContent.LoadHtml(inputHtmlString);

    // Parse HTML content for links
    var links = htmlContent.DocumentNode.SelectNodes("//a");
    foreach (var link in links)
    {
        link.SetAttributeValue("target", target);
    }

    return htmlContent.DocumentNode.OuterHtml;
}
并使用它清理我的链接:

// Enforce targets for links as "_blank" to open in new window
asset.Description = asset.Description.SetHtmlLinkTargetAttribute("_blank");

dotnetrocks,但使用正则表达式进行html解析时不会查看,对于有效的XHTML输入,此任务可能是可能的。一个简单的正则表达式可能会匹配内部评论和CDATA区域,这对你来说可能是个问题,也可能不是。这些复杂的原因就是为什么在堆栈溢出中,通常会得到某个链接作为“使用正则表达式解析HTML”问题的答案。快速回答很好,但您不必解释正则表达式中已经存在target=“\u blank”或target=“something other”。想一想,很好的解决方案。我刚刚将正则表达式更改为:regex.Replace(输入“]+)>”,”);唯一的变化是我在双引号插入regex替换之前使用了escape,否则我会得到编译错误。这会不会把所有以?、开头的其他标记都搞糟,即。如果仍然要添加目标属性,为什么还要费心寻找标记的结尾呢?不使用RegEx.Replace(inputString),“我按顺序找到了两个regexp来实现这一点。注意-我正在使用JS.Remove target,如果它存在的话
result=result.Replace(/(]*)(target=“[^”]*>)/gi,$1$3”);
,添加新的target=“\u blank”
result=result.Replace(/(]*>)/gi,$1 target=“\u blank”$2”);
然后使用var newHtml=document.DocumentNode.OuterHtml;