如何使用Regex在YouTube链接中查找ID?

时间:2010-04-14 17:29:06

标签: python regex youtube

当我尝试使用正则表达式提取此视频ID(AIiMa2Fe-ZQ)时,我无法获得所有字母后的短划线。

>>> id = re.search('(?<=\?v\=)\w+', 'http://www.youtube.com/watch?v=AIiMa2Fe-ZQ')
>>> print id.group(0)
>>> AIiMa2Fe

6 个答案:

答案 0 :(得分:2)

而不是\ w +使用下面。单词字符(\ w)不包含短划线。它只包括[a-zA-Z_0-9]。

[\w-]+

答案 1 :(得分:1)

>>> re.search('(?<=v=)[\w-]+', 'http://www.youtube.com/watch?v=AIiMa2Fe-ZQ').group()
'AIiMa2Fe-ZQ'

\w是python2.x中[a-zA-Z0-9_]的缩写,你必须在py3k中使用re.A标志。你很明显在该videoid中有其他角色,即连字符。我还从lookbehind中删除了多余的逃逸反斜杠。

答案 2 :(得分:1)

/(?:/v/|/watch\?v=|/watch#!v=)([A-Za-z0-9_-]+)/

Explain the RE

有三种备用YouTube格式:/v/[ID]watch?v=以及新的AJAX watch#!v=此RE可捕获所有这三种格式。用户页面还有新的YouTube网址,其格式为/ user / [user]?content = {complex URI}这里没有任何正则表达式捕获...

答案 3 :(得分:1)

我不知道youtube哈希的模式,但只是在可能性中包含“ - ”,因为它不被视为alpha:

import re
id = re.search('(?<=\?v\=)[\w-]+', 'http://www.youtube.com/watch?v=AIiMa2Fe-ZQ')
print id.group(0)

我编辑了上述内容,因为事实证明:

>>> re.search("[\w|-]", "|").group(0)
'|'

“|”在字符定义中不作为特殊字符,但确实匹配“|”管。道歉。

答案 4 :(得分:1)

使用urlparse模块代替正则表达式来处理这类事情。

import urlparse

parsed_url = urlparse.urlparse(url)
if parsed_url.netloc.find('youtube.com') != -1 and parsed_url.path == '/watch':
    video = urlparse.parse_qs(parsed_url.query).get('v', None)

    if video is None:
        video = urlparse.parse_qs(parsed_url.fragment.strip('!')).get('v', None)

    if video is not None:
        print video[0]

编辑:针对即将推出的新youtube网址格式进行了更新。

答案 5 :(得分:0)

我试试这个:

>>> import re
>>> a = re.compile(r'.*(\-\w+)$')
>>> a.search('http://www.youtube.com/watch?v=AIiMa2Fe-ZQ').group(1)
'-ZQ'