使用子字符串提取YouTube视频的视频ID
本文关键字:视频 的视频 ID YouTube 提取 字符串 | 更新日期: 2023-09-27 18:12:39
我目前正在尝试从YouTube提供的嵌入url中提取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上,我不知道为什么??
欢呼
我总是发现使用正则表达式来处理这种事情要容易得多,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/之前的所有字符,然后提取其后面的所有单词字符作为命名组。
你可以得到这个命名组的值。这样做的好处是,即使frameborder没有直接出现在src.
之后,也可以工作。希望这是有用的,
《路加福音》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;
}
当两个测试字符串中的任何一个不存在时,您可能应该有更多的异常处理。
与上面的答案相似,但被打败了。度
//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;