从 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 的替换,因此作为输出给出。
我正在尝试从 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 的替换,因此作为输出给出。