Существует ли регулярное выражение для поиска строки между двумя косыми чертами и после определенной строки? [Р]

Если вам удается поддерживать системы баз данных, которые работают с активным DST, внимательно проверьте, нужно ли их отключать во время перехода осенью. Mandy DBS (или другие системы) не любят пропускать одну и ту же точку в (локальном) времени дважды, что точно происходит, когда вы поворачиваете назад осенью. SAP решил это с помощью (IMHO действительно опрятного) решения - вместо того, чтобы возвращать часы, они просто позволяют внутренним часам работать на половине обычной скорости в течение двух часов ...

2
задан Ray S. 30 March 2019 в 22:17
поделиться

5 ответов

Кроме того, есть также str_match , которые будут возвращать совпадающие группы внутри регулярного выражения:

str_match(url, "://(.*?)/(.*?)(\/|$)")[,2]
0
ответ дан jspcal 30 March 2019 в 22:17
поделиться

Вы можете использовать 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"
0
ответ дан G5W 30 March 2019 в 22:17
поделиться

Вы можете написать собственную функцию для работы со строками:

get.nameofpage = function(string){
  (unlist(strsplit(string, "\\/")))[4]
}

# Example
my.string = "https://www.facebook.com/nameofpage/posts/13142894231"
> get.nameofpage(my.string)
[1] "nameofpage"
0
ответ дан NM_ 30 March 2019 в 22:17
поделиться

Вы можете использовать gsub. Это возвращает по крайней мере один символ + после .com, который не является косой чертой [^/]:

link <- "https://www.facebook.com/nameofpage/posts/13142894231"

gsub("^.*\\.com/([^/]+).*", "\\1", link)
[1] "nameofpage"

Примечание. не будет работать для других доменов .edu, .org и т. д.)

0
ответ дан Andrew 30 March 2019 в 22:17
поделиться

Существует некоторый вопрос относительно того, что именно мы знаем о положении желаемого поля, но если мы знаем, что это 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)
0
ответ дан G. Grothendieck 30 March 2019 в 22:17
поделиться
Другие вопросы по тегам:

Похожие вопросы: