2017-08-01 14 views
0

私はYouTubeのリンク列からビデオIDの文字列のみを抽出したいと考えています。URLからURLを抽出するR stringr regex

これは後に現れるURLの末尾にidを持つほとんどの標準ユーチューブリンクのために働く
str_extract(data$link, "\\b[^=]+$") 

=すなわち

youtube.com/watch?v=kFF0v0FQzEI 
に署名:

私は現在使用しているstringr機能はこれです

しかし、すべてのリンクが、このパターンに従わない、例:

youtube.com/v/kFF0v0FQzEI 
youtube.com/vi/kFF0v0FQzEI 
youtu.be/kFF0v0FQzEI 
www.youtube.com/v/kFF0v0FQzEI?feature=autoshare&version=3&autohide=1&autoplay=1 
www.youtube.com/watch?v=kFF0v0FQzEI&list=PLuV2ACKGzAMsG-pem75yNYhBvXZcl-mj_&index=1 

だから、誰のHELができました上記のすべての例でid(kFF0v0FQzEI)を抽出するためにR正規表現のパターンを使用していますか?

これを行うために他の言語で使用される正規表現パターンの例を見てきましたが、どのようにR準拠に変換するのかは分かりません。

ありがとうございます!

+1

可能な複製(https://stackoverflow.com/questions/3452546/javascript-regex-how-do-i-get -the-youtube-video-id-from-a-url) –

+0

私はあなたの周りを突くことができ、これのためのスタックオーバーフローの正規表現を見つけると思う。もしあなたがそのRの部分で立ち往生したら、もっと集中的な質問に戻ってください。 –

答えて

0

あなたは次のようなものを使用できますが、提供した例にかなりハードコードされています。

links = c("youtube.com/v/kFF0v0FQzEI", 
      "youtube.com/vi/kFF0v0FQzEI", 
      "youtu.be/kFF0v0FQzEI", 
      "www.youtube.com/v/kFF0v0FQzEI?feature=autoshare&version=3&autohide=1&autoplay=1", 
      "www.youtube.com/watch?v=kFF0v0FQzEI&list=PLuV2ACKGzAMsG-pem75yNYhBvXZcl-mj_&index=1", 
      "youtube.com/watch?v=kFF0v0FQzEI", 
      "http://www.youtube.com/watch?argv=xyz&v=kFF0v0FQzEI") 

get_id = function(link) { 
    if (stringr::str_detect(link, '/watch\\?')) { 
    rgx = '(?<=\\?v=|&v=)[\\w]+' 
    } else { 
    rgx = '(?<=/)[\\w]+/?(?:$|\\?)' 
    } 
    stringr::str_extract(link, rgx) 
} 

ids = unname(sapply(links, get_id)) 
# [1] "kFF0v0FQzEI" "kFF0v0FQzEI" "kFF0v0FQzEI" "kFF0v0FQzEI?" 
#  "kFF0v0FQzEI" "kFF0v0FQzEI" "kFF0v0FQzEI" 
[JavaScriptをREGEX?:私はURLからYouTubeの動画IDを取得するにはどうすればよい]の
+0

完璧、ありがとう! –

+0

@PaulCampbellよろしくお願いいたします。それがうまくいってうれしい – brittenb

関連する問題