python中URL的正则表达式
这个URL不应该是无效的,因为www前面有一个点吗 我的输出显示:python中URL的正则表达式,python,regex,Python,Regex,这个URL不应该是无效的,因为www前面有一个点吗 我的输出显示: url1='http://.www.youtube.com/watch?v=tKTZoB2Vjuk&index=1&list=PLqmh7e11V6OzWBTSYNq1yYznar709uDQx' #url2='www.ssa.gov/cgi-bin/popularnames.cgi' def verify(url): try: x=re.search('((^https|http|ftp
url1='http://.www.youtube.com/watch?v=tKTZoB2Vjuk&index=1&list=PLqmh7e11V6OzWBTSYNq1yYznar709uDQx'
#url2='www.ssa.gov/cgi-bin/popularnames.cgi'
def verify(url):
try:
x=re.search('((^https|http|ftp):)?(/?/?www)\.[a-zA-Z0-9]+\.[a-zA-Z]{2,3}\/[-a-zA-Z0-9?=&%#./]*',url)
print x.group()
except:
print "not valid"
verify(url1)
只有
https
被锚定到字符串的开头,协议组被标记为可选。因此,您的正则表达式将匹配任何包含URI(由正则表达式定义)的文本,只要它不需要以https
开头
我建议完全删除^
并使用re.match
而不是re.search
您的正则表达式还存在其他问题,这些问题将阻止它匹配其他完全有效的URI。让我们对您的正则表达式进行分解:
www.youtube.com/watch?v=tKTZoB2Vjuk&index=1&list=PLqmh7e11V6OzWBTSYNq1yYznar709uDQx
从上面可以看出,协议和斜杠都是可选的,所以不管一开始是什么,您的正则表达式所需要的都是某个地方的www。相关:但是www
之前的所有位都是可选的,所以它们只是被跳过(参见示例)!如果希望将正则表达式锚定到字符串的开头,请在开头(左括号外)添加一个^
,并使用匹配
,而不是搜索
,使用匹配
“应该是”或使用匹配
,因为^
与匹配根本不需要。
( # begin group
(^https|http|ftp): # protocol (and only https needs to be at the start)
)? # end optional group
( # start group
/?/? # optional slashes
www # www
) # end group
...