我目前正在尝试从嵌入式网址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上,我不知道为什么???
干杯
答案 0 :(得分:7)
我总觉得使用正则表达式更容易,Substring
和IndexOf
似乎总是对我而言,但这只是我个人的意见。
以下是我将如何解决这个问题。
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;