当前位置: 首页 > 面试题库 >

在python中使用正则表达式将URL替换为链接

郤玉书
2023-03-14
问题内容

如何将某些文本转换为链接?回到PHP中,我使用了这段代码,该代码非常适合我的目的:

            $text = preg_replace("#(^|[\n ])(([\w]+?://[\w\#$%&~.\-;:=,?@\[\]+]*)(/[\w\#$%&~/.\-;:=,?@\[\]+]*)?)#is", "\\1<a href=\"\\2\" target=\"_blank\">\\3</a>", $text);
            $text = preg_replace("#(^|[\n ])(((www|ftp)\.[\w\#$%&~.\-;:=,?@\[\]+]*)(/[\w\#$%&~/.\-;:=,?@\[\]+]*)?)#is", "\\1<a href=\"http://\\2\" target=\"_blank\">\\3</a>", $text);

我尝试使用Python,但是无法使其正常工作。如果有人可以将其转换为Python :)。


问题答案:

下面的代码是对python的简单翻译。您应该确认它确实可以满足您的要求。有关更多信息,请参见Python正则表达式HOWTO。

import re

pat1 = re.compile(r"(^|[\n ])(([\w]+?://[\w\#$%&~.\-;:=,?@\[\]+]*)(/[\w\#$%&~/.\-;:=,?@\[\]+]*)?)", re.IGNORECASE | re.DOTALL)

pat2 = re.compile(r"#(^|[\n ])(((www|ftp)\.[\w\#$%&~.\-;:=,?@\[\]+]*)(/[\w\#$%&~/.\-;:=,?@\[\]+]*)?)", re.IGNORECASE | re.DOTALL)


urlstr = 'http://www.example.com/foo/bar.html'

urlstr = pat1.sub(r'\1<a href="\2" target="_blank">\3</a>', urlstr)
urlstr = pat2.sub(r'\1<a href="http:/\2" target="_blank">\3</a>', urlstr)

print urlstr

这是我最后的输出:

<a href="http://www.example.com/foo/bar.html" target="_blank">http://www.example.com</a>


 类似资料:
  • 问题内容: 我需要替换字符串的一部分。我浏览了Python文档并发现了re.sub。 我期望这能打印,而不是“酒吧”。 谁能告诉我我做错了什么? 问题答案: 除了捕获要 替换 的零件外,您还可以捕获要 保留 的零件,然后使用引用对其进行引用以将它们包括在替换字符串中。 尝试以下方法: 另外,假设这是HTML,则应考虑使用HTML解析器来执行此任务,例如Beautiful Soup 。

  • Change is inevitable, except from vending machines. — Robert C. Gallagher Puppet 的 regsubst 函数提供了一种处理文本的简单方法, 用于在字符串中查找和替换,或者从字符串提取匹配的模式。 例如,我们通常需要对从 facter 或者从外部程序获得的数据做这样的处理。 在本例中将会看到如何使用 regsubst 提

  • 问题内容: 我有一个数据框如下: 例如,我想将所有字符’o’替换为’a’: 那我做 它给我我需要的东西。 但是 ,当我要将’o’替换为时,它将整个字符串更改为。 熊猫的文件有什么解释吗? 我可以通过源代码找到一些信息。 更多信息:(它将整个字符串更改为) 问题答案: NaN始终用作失踪的占位符,当用“ missing”替换字符串的一部分时,这仅意味着整个条目已被破坏。我听说过这种叫做NaN污染的方

  • 通过好奇心,有没有办法用Java Stream编写它?

  • 下面的代码是从字符串中检查任何URL的文本,并将其转换为可单击的链接。 我正在尝试获取它,以便如果有一个指向图像的链接,它会在 如果字符串中只有一个链接,它就可以正常工作。当有多个链接时,所有链接都得到最后一个链接的rel。 我曾尝试更改$pattern,使其与youtube或图像链接匹配相同的正则表达式,但最终在URL后为整个文本创建了一个链接。 例子:

  • 问题内容: 我已将一些定价数据读入pandas数据框中,其值显示为: 我想将其简化为数字值。我知道我可以遍历并应用正则表达式 到每个字段,然后将结果列表重新组合在一起,但是有没有一种循环的方式? 谢谢 问题答案: 您可以使用删除所有非数字: regex101演示