如何在文本C#中用超链接/锚标记替换带有方括号的URL

时间:2018-09-23 09:15:56

标签: c# regex winforms

我正在尝试用锚标记替换所有出现的URL。 我可以对大多数URL字符执行此操作,但是当URL中包含()时,代码就会中断。

例如。

  

https://example.com/Heavy-Industry/Global-Perfluorosulfonic-Acid-(PFSA)-Market-Status-By-Manufacturers,-Types-And-Application,-History-And-Forecast-2025#sample

这是我的代码:

protected string MakeLink(string text)
{
    string text2 = Regex.Replace(text,
        @"((http|ftp|https):\/\/[\w\-_]+(\.[\w\-_]+)+([\w\-\.,@?^=%&:/~\+#]*[\w\-\@?^=%&/~\+#])?)",
        "<a target='_blank' href='$1'>$1</a>");

    return text2;
}

1 个答案:

答案 0 :(得分:1)

您应该将括号添加到字符类[\w\-.,@?^=%&amp;:/~+#()]

如果您不使用捕获组,那么我认为可以通过使用单个捕获组进行替换来使正则表达式更加紧凑。

请注意,您不必在字符类中转义点和加号。

((?:https?|ftp):\/\/[\w\-_]+(?:\.[\w\-_]+)+(?:[\w\-.,@?^=%&amp;:/~+#()]*[\w\-@?^=%&amp;/~+#])?)

Regex demo | Demo C#