替换文本中的锚点/链接

时间:2018-11-09 09:45:41

标签: c# html regex string

2 个答案:

答案 0 :(得分:1)

答案 1 :(得分:0)

已更新(已更正的正则表达式以支持空白和换行符)


您可以尝试使用此表达式

Regex r = new Regex(@"<[\s\n]*a[\s\n]*(([^\s]+\s*[ ]*=*[ ]*[\s|\n*]*('|"").*\3)[\s\n]*)*href[ ]*=[ ]*('|"")(?<link>.*)\4[.\n]*>(?<anchor>[\s\S]*?)[\s\n]*<\/[\s\n]*a>");

即使您的锚分割成多行,它也会匹配您的锚。之所以这么长,是因为它支持标记及其值之间的空白,而C#不支持子例程,因此必须[\s\n]*重复多次。

您可以在dotnetfiddle上看到有效的示例 您可以像这样在示例中使用它。

public static string GetAndFixAnchor(string articleBody, string articleWikiCheck) {
    if (articleWikiCheck == "id|wpTextbox1")
    {
        return Regex.Replace(articleBody, 
                             @"<[\s\n]*a[\s\n]*(([^\s]+\s*[ ]*=*[ ]*[\s|\n*]*('|"").*\3)[\s\n]*)*href[ ]*=[ ]*('|"")(?<link>.*)\4[.\n]*>(?<anchor>[\s\S]*?)[\s\n]*<\/[\s\n]*a>",
                             "[${link} ${anchor}]");
    }
    else
    {
        return articleBody;
    }
}