我正在使用python并尝试使用正则表达式来查看我的字符串中是否有url。我尝试了多种不同的正则表达式,但它们总是带有“无”,即使字符串显然是一个网站。
示例:
>>> print re.search(r'/((?:https?\:\/\/|www\.)(?:[-a-z0-9]+\.)*[-a-z0-9]+.*)/i','www.google.com')
None
任何帮助将不胜感激!
答案 0 :(得分:1)
如同在Python Regex for URL doesn't work中那样,切换到类似的东西:
r'http[s]?://(?:[a-zA-Z]|[0-9]|[$-_@.&+]|[!*\(\),]|(?:%[0-9a-fA-F][0-9a-fA-F]))+'
有关许多正在验证网址的许多正则表达式的详细调查,请参阅https://mathiasbynens.be/demo/url-regex ...
答案 1 :(得分:0)
如果您想检查字符串是否是您可以使用的URL:
print re.search(r'(^(https?://|www\.)([a-z0-9-]+\.)+([a-z0-9]+)$)','www.google.com', re.I)
如果要验证字符串是否包含URL,您只需要删除^和$模式:
print re.search(r'((https?://|www\.)([a-z0-9-]+\.)+([a-z0-9]+))','www.google.com', re.I)
记住:re。我是用于不区分大小写的匹配,' ^'匹配行的开头,$匹配行的结尾。
答案 2 :(得分:0)
此Wiki中已解释了有效网址的语法。基于此,如果该正则表达式具有有效的URL,则该正则表达式可以匹配该字符串。
^((?:https?|ftp):\/{2}[\w.\/]+(?::\d{1,4})?\/?[?\w_#\/.]+)
如果您想保持网址的scheme
部分可选。
^((?:https?|ftp)?(?::\/{2})?[\w.\/]+(?::\d{1,4})?\/?[?\w_#\/.]+)
输出
>>> re.search(r'^((?:https?|ftp)?(?::\/{2})?[\w.\/]+(?::\d{1,4})?\/?[?\w_#\/.]+)','www.google.com').group()
'www.google.com'
>>> re.search(r'^((?:https?|ftp)?(?::\/{2})?[\w.\/]+(?::\d{1,4})?\/?[?\w_#\/.]+)','http://www.google.com').group()
'http://www.google.com'
>>> re.search(r'^((?:https?|ftp)?(?::\/{2})?[\w.\/]+(?::\d{1,4})?\/?[?\w_#\/.]+)','https://www.google.com').group()
'https://www.google.com'
您可以查看有关其工作原理的详细演示和说明here。
答案 3 :(得分:0)
我使用以下正则表达式来验证插入的字符串是否为 URL:
r'((http|https)\:\/\/)?[a-zA-Z0-9\.\/\?\:@\-_=#]+\.([a-zA-Z]){2,6}([a-zA-Z0-9\.\&\/\?\:@\-_=#])*'