从R中的一批URLS中提取参数

时间:2018-02-28 17:59:32

标签: r regex substr

我正在尝试从R中的URLS中提取参数。参数的确切位置将发生变化,因此我需要以其他方式识别它。

以下是网址示例:

https://www.example.se/-Hotell.d178317.Reseguide-Hotell-SMP?destinationId=178317&kword=ZzZz.4650002325454

我想在d之后提取数字 - 在此示例中为178317

目前我正在使用此功能sub(".d","",url),我无法弄清楚如何继续。有人可以建议如何在这个例子中使用这个功能吗?干杯!

3 个答案:

答案 0 :(得分:1)

使用几个sub s:

> url
[1] "https://www.example.se/-Hotell.d178317.Reseguide-Hotell-SMP?destinationId=178317&kword=ZzZz.4650002325454"

直到第一个".d"

的所有内容
> sub(".*?\\.d","",url)
[1] "178317.Reseguide-Hotell-SMP?destinationId=178317&kword=ZzZz.4650002325454"
> 

sub包裹它,从第一个非数字开始切掉所有内容:

> sub("[^0-9].*","",sub(".*?\\.d","",url))
[1] "178317"

使用as.numeric制作一个号码。

答案 1 :(得分:0)

我猜你真正想要的是在destinationId之后提取任何东西,所以你可能会相处:

urls <- c("https://www.example.se/-Hotell.d178317.Reseguide-Hotell-SMP?destinationId=178317&kword=ZzZz.4650002325454")
gsub(".*?destinationId=(\\d+).*", "\\1", urls)

哪个收益

[1] "178317"

答案 2 :(得分:0)

使用正则表达式比@Spacedman更精细,将他的两个部分加上匹配,你可以将它限制为一次调用sub():

sub(".*\\.d([0-9]+)\\..*", "\\1", url)

正则表达式的作用:

  • 。*匹配任何字符(。)零次或多次(*)
  • \\。d匹配一个点(实际字符,不是元字符; \\转义元字符)后跟d
  • ([0-9] +)包含0到9([0-9])的数字至少一次(+);括号使此部分可用于匹配
  • \\。再一个点
  • 。*后面再跟任何字符

“\\ 1”匹配括号中正则表达式中的位,现在用作sub的替换,因此作为输出。