从字符串中提取R中的子字符串,其中固定的起始位置和结束点作为找到的字符

时间:2014-09-30 04:00:10

标签: regex r

我想在R中进行以下提取。

我有一个列有这样的链接 http://www.imdb.com/title/tt2569314/companycredits

我想从中提取tt2569314并将其存储在新列中。

我想要这样做的方式是,比较一下,如果第一个' /'在起始位置后找到。

我希望在SQL中将它作为SUBSTR和INSTR的混合物。

请告知。

4 个答案:

答案 0 :(得分:2)

你可以试试这个:

a<-"http://www.imdb.com/title/tt2569314/companycredits"
sub("http://www.imdb.com/.+/(.+)/.+","\\1" ,a)
#[1] "tt2569314"

答案 1 :(得分:2)

如果路径结构中的所有链接都相似,则可以使用dirname

x <- "http://www.imdb.com/title/tt2569314/companycredits"
sub("(.*)[/]", "", dirname(x))
# [1] "tt2569314"

或者您可以将正则表达式与基本网址

粘贴在一起
y <- "http://www.imdb.com"
sub(paste0(y, "[/](.*)[/](.*)[/](.*)"), "\\2", x)
# [1] "tt2569314"

或者你甚至可以逃脱这个:

basename(dirname(x))
# [1] "tt2569314"

如果你使用子字符串,那就更有意义了。但是stringr有一些有用的功能。

library(stringr)
s1 <- str_locate_all(x, "[/]")[[1]]
s2 <- str_locate(x, "http://www.imdb.com/title")
m <- match(s2[,2]+1, s1[,1])
substr(x, s1[m,1]+1, s1[m+1,1]-1)
# [1] "tt2569314"

答案 2 :(得分:1)

你可以尝试:

 str1 <- "http://www.imdb.com/title/tt2569314/companycredits"
 library(httr)
 gsub("^[^/]*\\/|\\/[^/]*", "", parse_url(str1)$path)
 #[1] "tt2569314"

答案 3 :(得分:0)

你也可以试试这个,

> x <- "http://www.imdb.com/title/tt2569314/companycredits"
> m <- regexpr("^http://www.imdb.com/[^/]*/\\K[^/]+", x, perl=TRUE)
> regmatches(x, m)
[1] "tt2569314"