检测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的最佳正则表达式的主要内容,如果未能解决你的问题,请参考以下文章