Python正则表达式将youtube网址转换为youtube视频

Fri*_*its 6 python regex youtube url

我正在制作一个正则表达式,所以我可以在用户发布的一段HTML文本中找到youtube链接(可以是多个).

目前我正在使用以下正则表达式将"http://www.youtube.com/watch?v=-JyZLS2IhkQ"更改为显示相应的YouTube视频:

return re.compile('(http(s|):\/\/|)(www.|)youtube.(com|nl)\/watch\?v\=([a-zA-Z0-9-_=]+)').sub(tag, value)
Run Code Online (Sandbox Code Playgroud)

(变量'tag'是html的一点,所以视频有效,'值'是用户帖子)

现在这个工作..直到网址是这样的:

的 'http://www.youtube.com/watch V = -JyZLS2IhkQ及功能...?'

现在我希望你们能帮助我找出如何匹配'&feature ...'部分,以便它消失.

示例HTML:

No replies to this post..

Youtube vid:

http://www.youtube.com/watch?v=-JyZLS2IhkQ

More blabla
Run Code Online (Sandbox Code Playgroud)

谢谢你的想法,非常感谢

斯特凡

Mor*_*eno 6

我在这里解决它:

import re

def youtube_url_validation(url):
    youtube_regex = (
        r'(https?://)?(www\.)?'
        '(youtube|youtu|youtube-nocookie)\.(com|be)/'
        '(watch\?v=|embed/|v/|.+\?v=)?([^&=%\?]{11})')

    youtube_regex_match = re.match(youtube_regex, url)
    if youtube_regex_match:
        return youtube_regex_match

    return youtube_regex_match
Run Code Online (Sandbox Code Playgroud)

测试:

youtube_urls_test = [
    'http://www.youtube.com/watch?v=5Y6HSHwhVlY',
    'http://youtu.be/5Y6HSHwhVlY', 
    'http://www.youtube.com/embed/5Y6HSHwhVlY?rel=0" frameborder="0"',
    'https://www.youtube-nocookie.com/v/5Y6HSHwhVlY?version=3&hl=en_US',
    'http://www.youtube.com/',
    'http://www.youtube.com/?feature=ytca']


for url in youtube_urls_test:
    m = youtube_url_validation(url)
    if m:
        print('OK {}'.format(url))
        print(m.groups())
        print(m.group(6))
    else:
        print('FAIL {}'.format(url))
Run Code Online (Sandbox Code Playgroud)

  • 要匹配像http://www.youtube.com/watch?feature = player_detailpage& v = QemTZn8YfJ0#t = 46s`这样的网址,我将你的正则表达式编辑为`youtube_regex =(r'(https?://)? (www \.)?''(youtube | youtu | youtube-nocookie)\.(com | be)/''(watch \?.*?(?= v =)v = | embed/| v/|. + \?v =)?([^&=%\?] {11})')` (2认同)

小智 5

您应将正则表达式指定为原始字符串。

您没有逃脱每个字符长相特别,只是那些它

(foo|)您可以使用而不是指定一个空的分支()使某些内容可选?

如果要包含-在字符集中,则必须对其进行转义或将其放在右方括号之后。

您可以使用特殊字符集,例如\w(equals [a-zA-Z0-9_])来缩短正则表达式。

r'(https?://)?(www\.)?youtube\.(com|nl)/watch\?v=([-\w]+)'
Run Code Online (Sandbox Code Playgroud)

现在,为了匹配整个URL,您必须考虑在输入中可以或不能遵循的内容。然后,将其放入前瞻性组(您不想使用它)。

在这个例子中,我把一切的除了-=%&和字母字符来结束URL(懒得去想任何困难)。

v参数到URL末尾之间的所有内容均被贪婪地消耗.*?

r'(https?://)?(www\.)?youtube\.(com|nl)/watch\?v=([\w-]+)(&.*?)?(?=[^-\w&=%])'
Run Code Online (Sandbox Code Playgroud)

不过,我不会对此总体解决方案抱有太大的信心。众所周知,用户输入很难进行可靠地解析。