【问题标题】:Pulling the Video ID of a YouTube video using substrings使用子字符串提取 YouTube 视频的视频 ID
【发布时间】:2011-12-15 15:42:57
【问题描述】:

我目前正在尝试从嵌入 url 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 上失效了,我不知道为什么???

干杯

【问题讨论】:

  • 为什么是子字符串?你真的想要正则表达式。
  • 正则表达式将是一个更简洁的解决方案,@Oliver,如果你展示一个例子我会评价它。

标签: c# string youtube


【解决方案1】:

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

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;
    }

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

【讨论】:

  • 你会用这个嵌入代码做什么:&lt;iframe width="560" height="315" frameborder="0" allowfullscreen src="http://www.youtube.com/embed/aSVpBqOsC7o"&gt;&lt;/iframe&gt;
【解决方案2】:

我总是觉得在这类事情上使用正则表达式要容易得多,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/ 之前的所有字符,然后将其后面的所有单词字符提取为命名组。

然后您可以获取此命名组的值。好处是,即使 frameborder 没有直接出现在 src 之后,这也可以工作。

希望这有用,

卢克

【讨论】:

【解决方案3】:

与上面的回答类似,但被打败了.. 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;

【讨论】:

    猜你喜欢
    • 2011-09-27
    • 1970-01-01
    • 2015-09-20
    • 1970-01-01
    • 2018-03-12
    • 2020-11-05
    • 2019-10-24
    • 2016-09-28
    • 2017-08-25
    相关资源
    最近更新 更多