检测Python中字符串内URL的最佳正则表达式

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了检测Python中字符串内URL的最佳正则表达式相关的知识,希望对你有一定的参考价值。

我尝试了很多正则表达式来检测字符串中的URL。

最后我选择这个:

URL_REGEX = r"""((?:(?:https|ftp|http)?:(?:/{1,3}|[a-z0-9%])|[a-z0-9.-]+[.](?:com|org|uk)/)(?:[^s()<>{}[]]+|([^s()]*?([^s()]+)[^s()]*?)|([^s]+?))+(?:([^s()]*?([^s()]+)[^s()]*?)|([^s]+?)|[^s`!()[]{};:'".,<>?«»“”‘’])|(?:(?<!@)[a-z0-9]+(?:[.-][a-z0-9]+)*[.](?:com|uk|ac)/?(?!@)))"""

效果很好...但是今天我得到了这样的字符串:

'This is my tweet check it out:http://www.example.com/blah and http://blabla.com'

您可以看到out:后的out:http:// ...没有空格。在这种情况下,我的脚本破坏了预期的结果并返回了如下代码:

out:http://www.example.com/blah

我的完整脚本示例(它从普通文本中拆分网址):

import re

URL_REGEX = r"""((?:(?:https|ftp|http)?:(?:/{1,3}|[a-z0-9%])|[a-z0-9.-]+[.](?:com|org|uk)/)(?:[^s()<>{}[]]+|([^s()]*?([^s()]+)[^s()]*?)|([^s]+?))+(?:([^s()]*?([^s()]+)[^s()]*?)|([^s]+?)|[^s`!()[]{};:'".,<>?«»“”‘’])|(?:(?<!@)[a-z0-9]+(?:[.-][a-z0-9]+)*[.](?:com|uk|ac)/?(?!@)))"""

s = 'This is my tweet check it out:http://www.example.com/blah and http://blabla.com'
result = re.split(URL_REGEX, s)
print(result)

任何人都可以建议一个更好的,较短的REGEXP来识别URL?

答案

尝试一下:

import re

url = 'This is my tweet check it out:http://www.example.com/blah and http://blabla.com'

result = re.findall('https?://(?:[-w.]|(?:%[da-fA-F]{2}))+', url)

result

输出:

['http://www.example.com', 'http://blabla.com']

以上是关于检测Python中字符串内URL的最佳正则表达式的主要内容,如果未能解决你的问题,请参考以下文章

检查字符串是不是为有效 URL 的最佳正则表达式是啥?

检查字符串是否为有效URL的最佳正则表达式是什么?

检测文本字符串中的(淘气或漂亮)URL 或链接

利用正则表达式实现python强口令检测

如何通过正则表达式检测内容中的任何 URL [重复]

php正则表达式获取href标签内的字符串