C # regex para obtener la identificación de video de youtube y vimeo por url

Estoy ocupado tratando de crear dos expresiones regulares para filtrar la identificación de youtube y vimeo video. Ya tengo las siguientes expresiones;

YouTube: (youtube\.com/)(.*)v=([a-zA-Z0-9-_]+)
Vimeo: vimeo\.com/([0-9]+)$

Como expliqué a continuación, hay 2 tipos de URL que coinciden con las expresiones regulares que ya he creado. Varios otros tipos de URL de Vimeo y YouTube no están cubiertos por las expresiones. Lo que más prefiero es que todo esto se puede cubrir en dos expresiones. Uno para todos los videos de Vimeo y uno para todos los videos de youtube. He estado ocupado experimentando con algunas expresiones diferentes, pero hasta ahora no he tenido éxito. Todavía estoy tratando de dominar las expresiones regulares, ¡así que espero estar en el camino correcto y que alguien pueda ayudarme! Si se requiere más información, ¡hágamelo saber!

URL de VIMEO NO COINCIDIDAS:

http://vimeo.com/channels/hd#11384488
http://vimeo.com/groups/brooklynbands/videos/7906210
http://vimeo.com/staffpicks#13561592

URL DE YOUTUBE NO COINCIDIDAS

http://www.youtube.com/user/username#p/a/u/1/bpJQZm_hkTE
http://www.youtube.com/v/bpJQZm_hkTE
http://youtu.be/bpJQZm_hkTE

URL coincidentes

http://www.youtube.com/watch?v=bWTyFIYPtYU&feature=popular
http://vimeo.com/834881

La idea es hacer coincidir todas las URL mencionadas anteriormente con dos expresiones regulares. Uno para vimeo y otro para youtube.

ACTUALIZACIÓN DESPUÉS DE LA RESPUESTA Sedith:

Así es como se ven mis expresiones ahora

public static readonly Regex VimeoVideoRegex = new Regex(@"vimeo\.com/(?:.*#|.*/videos/)?([0-9]+)", RegexOptions.IgnoreCase | RegexOptions.Multiline);
public static readonly Regex YoutubeVideoRegex = new Regex(@"youtu(?:\.be|be\.com)/(?:(.*)v(/|=)|(.*/)?)([a-zA-Z0-9-_]+)", RegexOptions.IgnoreCase);

Y en código tengo

var youtubeMatch = url.match(YoutubeVideoRegex );
var vimeoMatch = url.match(VimeoVideoRegex );

var youtubeIndex = (youtubeMatch.length - 1)
var youtubeId = youtubeMatch[youtubeIndex];

Como puede ver, ahora necesito encontrar el índice donde está el videoId en la matriz con las coincidencias devueltas desde la expresión regular. Pero quiero que solo devuelva la identificación en sí, por lo que no necesito modificar el código cuando YouTube de Vimeo decida cambiar sus URL. ¿Algún consejo sobre esto?

Respuestas a la pregunta(3)

Su respuesta a la pregunta