Если вам удается поддерживать системы баз данных, которые работают с активным DST, внимательно проверьте, нужно ли их отключать во время перехода осенью. Mandy DBS (или другие системы) не любят пропускать одну и ту же точку в (локальном) времени дважды, что точно происходит, когда вы поворачиваете назад осенью. SAP решил это с помощью (IMHO действительно опрятного) решения - вместо того, чтобы возвращать часы, они просто позволяют внутренним часам работать на половине обычной скорости в течение двух часов ...
Кроме того, есть также str_match
, которые будут возвращать совпадающие группы внутри регулярного выражения:
str_match(url, "://(.*?)/(.*?)(\/|$)")[,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"
Вы можете написать собственную функцию для работы со строками:
get.nameofpage = function(string){
(unlist(strsplit(string, "\\/")))[4]
}
# Example
my.string = "https://www.facebook.com/nameofpage/posts/13142894231"
> get.nameofpage(my.string)
[1] "nameofpage"
Вы можете использовать gsub
. Это возвращает по крайней мере один символ +
после .com, который не является косой чертой [^/]
:
link <- "https://www.facebook.com/nameofpage/posts/13142894231"
gsub("^.*\\.com/([^/]+).*", "\\1", link)
[1] "nameofpage"
Примечание. не будет работать для других доменов .edu, .org и т. д.)
Существует некоторый вопрос относительно того, что именно мы знаем о положении желаемого поля, но если мы знаем, что это 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 / basement Мы можем использовать dirname
и basename
, если мы знаем, что требуемое поле является третьим прошедшим полем:
basename(dirname(dirname(ss)))
## [1] "nameofpage" "nameofpage"
s <- "https://www.facebook.com/nameofpage/posts/13142894231"
ss <- c(s, s)