要检查它是否是文本中的URL,如果是,则使用href标记使用Python编辑它

时间:2014-07-07 09:05:24

标签: python

我有两个案例,我被困住了。

  

案例1)输入: - < p>这是一个示例文本。 http://sydney.edu.au/其他文字。< / p>

     

必需的输出: - < p>这是一个示例文本。 < a href =“http://sydney.edu.au/”> http://sydney.edu.au/< / a>其他文字。< / p>

     

案例2)输入: - < p>这是一个示例文本。 sydney.edu.au/ somthing else text。< / p>

     

必需的输出: - &lt; p&gt;这是一个示例文本。 &LT; a href =“sydney.edu.au /”&gt; sydney.edu.au/< / a&gt;其他文字。&lt; / p&gt;

我尝试过以下代码:

>> item = "< p >This is a sample text. http://sydney.edu.au/ somthing else text.< /p >"

>> import re

>> r = re.compile(r"(https?://[^ ]+)")

>> newstr = r.sub(r'<a href="\1">\1</a>', item)

这为CASE 1提供了输出,但没有为CASE 2提供输出。任何人都可以找到处理这两种情况的方法。

1 个答案:

答案 0 :(得分:0)

您的网址匹配正则表达式似乎无效。您可以查看here的正则表达式。

如果您只是想忽略&#34; https:&#34;那么你需要添加&#34;?&#34;用括号表示(https://)? 否则它只会采取&#39; s在https中作为可选项。

由于正则表达式中提到的https和案例2中没有出现,因此CASE2失败

编辑: 写正则表达式以匹配所有类型的网址甚至很难理解。

以下正则表达式很简单,适用于两种情况。

import re
input = "< p >This is a sample text. sydney.edu.au/ somthing else text.< /p >"
regex = "((?:https?://)?(?:www\.)?[a-zA-Z]+\.[a-z]+[^ ]*)"
re.sub(regex, '<a href=\\1>\\1</a>', input)
相关问题