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

C# 如何用文本C中的超链接/锚定标记替换带有括号的url#,c#,regex,winforms,C#,Regex,Winforms,我试图用锚标记替换所有出现的URL。 我可以对大多数URL字符执行此操作,但当URL中存在(和)时,代码会中断 例如 https://example.com/Heavy-Industry/Global-Perfluorosulfonic-Acid-(PFSA)-制造商的市场状况-类型和应用-历史和预测-2025年#样本 这是我的密码: protected string MakeLink(string text) { string text2 = Regex.Replace(text,

我试图用锚标记替换所有出现的URL。 我可以对大多数URL字符执行此操作,但当URL中存在
时,代码会中断

例如

https://example.com/Heavy-Industry/Global-Perfluorosulfonic-Acid-(PFSA)-制造商的市场状况-类型和应用-历史和预测-2025年#样本

这是我的密码:

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;
}
受保护的字符串MakeLink(字符串文本)
{
字符串text2=Regex.Replace(文本,
@“((http | ftp | https):\/\/[\w\-\+(\.[\w\-\+)+([\w\-,@?^=%&;:/~\+\\\\+]*[\w\-\@?^=%&;/\+\\\+])”,
"");
返回文本2;
}

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

如果您不使用捕获组,我认为您可以通过使用单个捕获组来替换,从而使您的正则表达式更加紧凑

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

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

|