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

Extracting a parameter from a batch of URLS in R

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

这是一个 URL 的例子:

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

我想提取 d 之后的数字 - 在本例中为 178317

目前我正在使用此功能sub(".d","",url),但我不知道如何继续。有人可以建议如何在此示例中使用此功能吗?干杯!

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

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

产生

[1] "178317"

使用几个 sub

> 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 包裹它,从第一个 non-digit 开始砍掉所有东西:

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

使用as.numeric来做一个数字。

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

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

正则表达式的作用:

  • .* 匹配任何字符 (.) 零次或多次 (*)
  • \\.d 匹配一个点(实际字符,而不是 meta-character;\\ 转义 meta-character)后跟一个 d
  • ([0-9]+) 包含从 0 到 9 ([0-9]) 的数字至少一次 (+);括号使这部分可用于匹配
  • \\.又是一个点
  • .* 后跟任意字符

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