python中URL的Regex

2024-04-20 00:57:48 发布

您现在位置:Python中文网/ 问答频道 /正文

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)

这个URL不应该是无效的,因为在www之前有一个点吗?你知道吗

我的输出显示:

www.youtube.com/watch?v=tKTZoB2Vjuk&index=1&list=PLqmh7e11V6OzWBTSYNq1yYznar709uDQx

Tags: comhttpurlindexyoutubewwwlistwatch
2条回答

只有https被锚定到字符串的开头,协议组被标记为可选。因此,regex将匹配任何包含URI(由regex定义)的文本,只要它不需要以https开头。你知道吗

我建议完全删除^,使用re.match而不是re.search。你知道吗

您的regex还有其他问题,这些问题会阻止它匹配其他完全有效的uri。你知道吗

我们来分解一下你的正则表达式:

(                    # 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
...

从上面,您可以看到协议和斜杠都是可选的,所以您的regex所需要的只是www上的某个地方,而不管开始是什么。你知道吗

相关问题 更多 >