在特定引用上提取字符串的一部分

时间:2017-01-13 10:55:55

标签: r

我需要在下面的链接中提取“& r =”之后的数字。

http://asdf.com/product/eyewear/eyeglasses?Brand[]=Allen%20Solly&r=472020&ck-source=google-adwords&ck-campaign=eyeglasses-cat-brand-broad&ck-adgroup=eyeglasses-dersdc-cat-brand-broad&keyword={keyword}&matchtype={matchtype}&network={network}&creative={creative}&adposition={adposition}

这是我尝试过的 C将我的链接存储在。

sub(".*&r=", "",c)

"472020&ck-source=google-adwords&ck-campaign=eyeglasses-cat-brand-broad&ck-adgroup=eyeglasses-dersdc-cat-brand-broad&keyword={keyword}&matchtype={matchtype}&network={network}&creative={creative}&adposition={adposition}"

这只给了我整个字符串的一部分。

我只需要数字472020

有什么想法吗?

3 个答案:

答案 0 :(得分:1)

以下是使用sub

获取它的方法
sub(".*=(\\d+)&.*", "\\1", z)
#[1] "472020"

as.integer(sub(".*=(\\d+)&.*", "\\1", z))
#[1] 472020

答案 1 :(得分:1)

我们可以使用str_extract

library(stringr)
as.numeric(str_extract(z, "(?<=\\&r\\=)\\d+"))
#[1] 472020

如果有多个匹配项,请使用str_extract_all代替str_extract

答案 2 :(得分:1)

为了完整起见,这里是基础R regmatches / regexpr组合:

 regmatches(z, regexpr("(?<=\\&r\\=)\\d+",z,perl=TRUE))

它使用与@ akrun的stringr版本相同的Perl风格的正则表达式。 regexpr(或gregexpr如果在同一个字符串中预期有相同模式的多个匹配项)匹配模式,而regmatches提取它(它被向量化,因此可以匹配/提取多个字符串立刻)。

> as.integer(regmatches(z,regexpr("(?<=\\&r\\=)\\d+",z,perl=TRUE)))
#[1] 472020