我有一个数据框,其中的一列包含这样的URls:
https://www.facebook.com/nameofpage/posts/13142894231
我正在尝试仅将本列的nameofpage
部分提取到新列中。我无法弄清楚如何在该确切位置提取字符串。该字符串有时包含文字“。”,文本和数字。
我一直在尝试使用tidyr的strsplit
和separate
,但收效有限。
tidyr代码如下:
separate(Link, c(NA, NA, NA, "target"), sep = "/")
但是,这根本不起作用。
我希望将nameofpage
提取到列中,但是有时输出实际上是URL的另一部分。
答案 0 :(得分:2)
您可以使用str_split
包中的stringr
。
URL = "https://www.facebook.com/nameofpage/posts/13142894231"
library(stringr)
str_split(URL, "/")
[[1]]
[1] "https:" "" "www.facebook.com" "nameofpage"
[5] "posts" "13142894231"
str_split(URL, "/")[[1]][4]
[1] "nameofpage"
答案 1 :(得分:1)
此外,还有str_match
,它将在正则表达式内返回匹配的组:
str_match(url, "://(.*?)/(.*?)(\/|$)")[,2]
答案 2 :(得分:1)
您可以编写一个自定义函数来处理您的字符串:
get.nameofpage = function(string){
(unlist(strsplit(string, "\\/")))[4]
}
# Example
my.string = "https://www.facebook.com/nameofpage/posts/13142894231"
> get.nameofpage(my.string)
[1] "nameofpage"
答案 3 :(得分:0)
您可以使用const delayBlocking = 50
。这会在.com之后返回至少一个<!doctype html>
<html lang="en">
<head>
<meta charset="UTF-8"/>
<title>Document</title>
</head>
<body>
<a id="block" href="#">Block</a>
<div id="statusMessage"></div>
<button>Click me!</button>
<script>
document.getElementById('block')
.addEventListener('click', doBlock);
function doBlock(event) {
setStatus('Blocking...');
// Introducing some ...
const delayBlocking = 0;
setTimeout(function() {
sleep(5000);
setStatus('Done');
}, delayBlocking);
}
function sleep(milliseconds) {
const start = Date.now();
while ((Date.now() - start) < milliseconds);
}
function setStatus(status) {
document.getElementById('statusMessage')
.textContent = status;
}
</script>
</body>
</html>
字符,该字符不是正斜杠gsub
:
+
注意:这仅适用于带有“ .com”的网址(即,不适用于其他域.edu,.org等)
答案 4 :(得分:0)
对于确切了解所需字段的位置存在一些疑问,但是如果我们知道它是第4个/分隔字段或倒数第3个字段,则可以分别使用(1)或(2)。 (如果不能同时假设这两种情况,请明确说明我们如何知道需要哪个字段。)
1)read.table 使用以下注释中的字符向量ss
作为输入,如果我们知道所需字段在第三个和第二个之间,则可以使用read.table
第四斜杠。
read.table(text = ss, sep = "/", fill = TRUE, as.is = TRUE)[[4]]
## [1] "nameofpage" "nameofpage"
1a)使用separate
:
library(tidyr)
separate(data.frame(ss), ss, c(NA, NA, NA, "target"), sep = "/", extra = "drop")
## target
## 1 nameofpage
## 2 nameofpage
2)目录名/地下室如果我们知道所需字段是过去的第三字段,则可以使用dirname
和basename
:
basename(dirname(dirname(ss)))
## [1] "nameofpage" "nameofpage"
s <- "https://www.facebook.com/nameofpage/posts/13142894231"
ss <- c(s, s)