使用子字符串拉取YouTube视频的视频ID

时间:2011-10-26 11:14:19

标签: c# string youtube

我目前正在尝试从嵌入式网址YouTube耗材中提取YouTube视频的ID。

我目前正在使用此作为示例:

<iframe width="560" height="315" src="http://www.youtube.com/embed/aSVpBqOsC7o" frameborder="0" allowfullscreen></iframe>

到目前为止,我的代码目前看起来像这样,

 else if (TB_VideoLink.Text.Trim().Contains("http://www.youtube.com/embed/"))
        {
            youtube_url = TB_VideoLink.Text.Trim();
            int Count  = youtube_url.IndexOf("/embed/", 7);
            string cutid = youtube_url.Substring(Count,youtube_url.IndexOf("\" frameborder"));

            LB_VideoCodeLink.Text = cutid;
        }

我似乎要到达那里,但是代码落在了CutID上,我不知道为什么???

干杯

3 个答案:

答案 0 :(得分:7)

我总觉得使用正则表达式更容易,SubstringIndexOf似乎总是对我而言,但这只是我个人的意见。

以下是我将如何解决这个问题。

Regex regexPattern = new Regex(@"src=\""\S+/embed/(?<videoId>\w+)");
Match videoIdMatch = regexPattern.Match(TB_VideoLink.Text);

if (videoIdMatch.Success)
{
    LB_VideoCodeLink.Text = videoIdMatch.Groups["videoId"].Value;
}

这将执行正则表达式匹配,找到src =“,忽略所有字符直到/ embed /然后将其后面的所有单词字符提取为命名组。

然后,您可以获取此命名组的值。优点是,即使在src之后没有直接发生frameborder,这也会有效。

希望这很有用,

答案 1 :(得分:2)

Substring方法的第二个参数是length,而不是第二个索引。从第一个测试中减去第二个测试的索引,得到所需的长度。

else if (TB_VideoLink.Text.Trim().Contains("http://www.youtube.com/embed/"))
    {
        youtube_url = TB_VideoLink.Text.Trim();
        // Find the start of the embed code
        int Count  = youtube_url.IndexOf("/embed/", 7);
        // From the start of the embed bit, search for the next "
        int endIndex = youtube_url.IndexOf("\"", Count);
        // The ID is from the 'Count' variable, for the next (endIndex-Count) characters
        string cutid = youtube_url.Substring(Count, endIndex - Count);

        LB_VideoCodeLink.Text = cutid;
    }

当两个测试字符串中的任何一个不存在时,您可能应该有更多的异常处理。

答案 2 :(得分:0)

与上面的答案类似,但被击败了...... doh

            //Regex with YouTube Url and Group () any Word character a-z0-9 and expect 1 or more characters +
        var youTubeIdRegex = new Regex(@"http://www.youtube.com/embed/(?<videoId>\w+)",RegexOptions.IgnoreCase|RegexOptions.Compiled);

        var youTubeUrl = TB_VideoLink.Text.Trim();

        var match = youTubeIdRegex.Match(youTubeUrl);
        var youTubeId = match.Groups["videoId"].Value; //Group[1] is (\w+) -- first group ()

        LB_VideoCodeLink.Text = youTubeId;