从R中的一批URL中提取参数
我试图从R中的URL中提取一个参数。参数的确切位置将发生变化,因此我需要以其他方式识别它 下面是一个URL示例:从R中的一批URL中提取参数,r,regex,substr,R,Regex,Substr,我试图从R中的URL中提取一个参数。参数的确切位置将发生变化,因此我需要以其他方式识别它 下面是一个URL示例: https://www.example.se/-Hotell.d178317.Reseguide-Hotell-SMP?destinationId=178317&kword=ZzZz.4650002325454 我想提取d-在本例中178317之后的数字 目前我正在使用这个函数sub(“.d”,”,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)
使用两个
sub
s:
> url
[1] "https://www.example.se/-Hotell.d178317.Reseguide-Hotell-SMP?destinationId=178317&kword=ZzZz.4650002325454"
这是第一个“.d”
”之前的所有内容:
然后用一个子文件
将从第一个非数字开始的所有内容切掉:
> sub("[^0-9].*","",sub(".*?\\.d","",url))
[1] "178317"
使用
as.numeric
生成一个数字。使用比@Spacedman使用的更精细的正则表达式,结合他的两个部分加上匹配,您可以将其限制为一次sub()调用:
正则表达式的作用:
- *匹配任意字符(.)零次或多次(*)
- \\.d匹配一个点(实际字符,不是元字符;\\转义元字符),后跟一个d
- ([0-9]+)至少包含一次从0到9([0-9])的数字(+);括号使此零件可用于匹配
- \\。又是一个点
- *后面跟任意字符
“\\1”匹配正则表达式中括号之间的位,该位现在被sub替换,因此作为输出。该数字出现两次-在
Hotell.d
之后的URL路径中,并作为查询字符串中的真参数(destinationId
)。例如,使用httr::parse_url
获取参数很容易。@Spacedman,在本例中,destinationId重复出现,但并不总是出现两次。这就是为什么我想在“.d”之后提取它。你能建议一个不同的公式吗?所以它总是紧跟在第一个连续的点和“d”之后的一系列数字?不幸的是,destinationId参数并不总是存在于我的其他URL中(请原谅这个糟糕的例子)。因此,我需要使用一个更复杂的正则表达式从“.d”之后提取它,结合这两个加上匹配,您可以将它限制为一个sub()调用:sub(“.\\\.d([0-9]+)\\\\..*,“\\1”,url)
@4rj4n,值得回答。我忘了在sub
中匹配,R的正则表达式函数很烦人…完成了。我还删除了你在正则表达式中的问号。我不确定它是否添加到正则表达式中。是吗?谢谢你们,真的很感谢你们的帮助:)
> sub(".*?\\.d","",url)
[1] "178317.Reseguide-Hotell-SMP?destinationId=178317&kword=ZzZz.4650002325454"
>
> sub("[^0-9].*","",sub(".*?\\.d","",url))
[1] "178317"
sub(".*\\.d([0-9]+)\\..*", "\\1", url)