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

Posted

技术标签:

【中文标题】如何在文本C#中用超链接/锚标记替换带有括号的url【英文标题】:How to replace a url having brackets with hyperlink/anchor tag in the text C# 【发布时间】:2019-02-27 02:26:54 【问题描述】:

我正在尝试用锚标记替换所有出现的 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】:

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

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

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

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

Regex demo | Demo C#

【讨论】:

以上是关于如何在文本C#中用超链接/锚标记替换带有括号的url的主要内容,如果未能解决你的问题,请参考以下文章

PHP 自动将URL转换为可点击超链接(锚标记)的功能

在HTML代码中,超链接元素的标记是啥?

根据类名替换 HTML 元素?

需要从 MS Excel 的列表中展开 MS Word 中的多个查找和替换以替换带有超链接的文本并修复错误

如何使用 C# 在给定文本中用忽略空格、回车或换行符替换字符串

JavaScript 提交带有锚标记的表单(链接)