【问题标题】:Remove part of a URL string in R [duplicate]在R中删除部分URL字符串[重复]
【发布时间】:2017-06-13 08:55:15
【问题描述】:

我有一堆形式的网址:

http://www.imdb.com/title/tt0383574/?ref_=adv_li_tt

我想留下电影代码(即 0383574)。我试过这个:

url = "http://www.imdb.com/search/title?genres=action&title_type=feature&sort=moviemeter,asc"

page = read_html(url)

movie.nodes <- html_nodes(page,'.lister-item-header a')
movie.nodes
movie.link <- sapply(html_attrs(movie.nodes),`[[`,'href')
movie.link <- paste0("http://www.imdb.com",movie.link)
movie.id1 <- gsub("http://www.imdb.com/title/tt", "", movie.link)
movie.id <- gsub("/?ref_=adv_li_tt", "", movie.id1)

但是调用movie.id 会返回:

[1]  "0451279/?" "2345759/?" "1790809/?" "1469304/?" "0974015/?" "3896198/?"
[7]  "3371366/?" "3890160/?" "3315342/?" "4425200/?" "2250912/?" "2406566/?"
[13] "1972591/?" "1825683/?" "2091256/?" "3501632/?" "4630562/?" "1386697/?"
[19] "4154756/?" "4116284/?" "2975590/?" "5884234/?" "5013056/?" "1211837/?"
[25] "0120616/?" "2527336/?" "1082807/?" "0325980/?" "1293847/?" "2034800/?"
[31] "2015381/?" "2911666/?" "1648190/?" "4912910/?" "1298650/?" "1477834/?"
[37] "2334871/?" "3748528/?" "2239822/?" "3469046/?" "2461150/?" "3731562/?"
[43] "1431045/?" "0449088/?" "3385516/?" "2226597/?" "0468569/?" "1219827/?"
[49] "0383574/?" "3498820/?"

如何从输出中删除 /??提前致谢。

【问题讨论】:

  • 对 gsub 使用 fixed = TRUE。

标签: r regex gsub


【解决方案1】:

考虑到电影 id 是唯一带有数字的部分,您可以删除任何其他不是数字的字符,留下如下的 id:

> gsub("[^[:digit:]]", "", movie.link)
 [1] "0451279" "2345759" "1790809" "1469304" "0974015" "3896198" "3371366" "3890160" "3315342" "4425200"
[11] "2250912" "2406566" "1972591" "1825683" "2091256" "3501632" "4630562" "1386697" "4154756" "4116284"
[21] "2975590" "5884234" "5013056" "1211837" "0120616" "2527336" "1082807" "0325980" "1293847" "2034800"
[31] "2015381" "2911666" "1648190" "4912910" "1298650" "1477834" "2334871" "3748528" "2239822" "3469046"
[41] "2461150" "3731562" "1431045" "0449088" "3385516" "2226597" "0468569" "1219827" "0383574" "3498820"

【讨论】:

    【解决方案2】:

    刚刚找到方法:

    movie.id <- gsub("\\D", "", movie.link)
    

    因为\\D 会删除任何不是数字的东西。

    【讨论】:

      【解决方案3】:

      gsub 接受正则表达式模式作为其第一个参数。在正则表达式中,? 是一个特殊字符,表示前面的字符可能出现零次或一次。

      因此,您当前正在搜索 ref_=adv_li_tt,该 ref_=adv_li_tt 前面有或没有紧跟在 / 之前。

      您需要转义 ? 以表明您正在搜索文字问号:

      gsub("/\?ref_=adv_li_tt", "", movie.id1)
      

      【讨论】:

        猜你喜欢
        • 2020-11-16
        • 2017-12-26
        • 2017-03-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-08-30
        • 2014-07-24
        相关资源
        最近更新 更多