Использование regex и stringr для извлечения последней части URL - PullRequest
1 голос
/ 09 января 2020

Я делаю сотни переадресаций URL и мне нужно извлечь весь текст после последней пересылки sla sh, поэтому:

/blog/2018/9/28/my_article1 становится /my_article1

I ' Я хотел бы использовать пакет stringr из tidyverse в идеале. Я видел подобный вопрос (не для R) здесь:

Regex начать поиск с конца строки (обратный)

... и попробовал это:

df %>% 
  mutate(new.page = str_extract(old.page, "/[^\/]+$/"))

... но получаю ошибку: Error: '\/' is an unrecognized escape in character string starting ""/[^\/"

Я пытался удалить экранирующую обратную косу sh, но безрезультатно.

Ниже приведен dput представляют пример данных исходных URL, где old.page - это то, с чего я начинаю, и new.page, где я хотел бы добраться.

structure(list(old.page = c("/blog/2018/9/28/my_article1", "/blog/2013/05/22/1735", 
                            "/blog/2013/02/27/my-goals", "/blog/2013/01/23/leading-change", 
                            "/blog/2013/11/19/2-blog-posts-in-1"), new.page = c("/my_article1", 
                                                                                "/1735", "/my-goals", "/leading-change", "/2-blog-posts-in-1"
                            )), class = c("spec_tbl_df", "tbl_df", "tbl", "data.frame"), row.names = c(NA, 
                                                                                                       -5L))

Ответы [ 2 ]

4 голосов
/ 09 января 2020

Если вы хотите избежать регулярных выражений, вы можете использовать basename(). paste0() - это включение обратного знака sh в новом столбце.

df %>% 
  mutate(new.page = paste0("/", basename(old.page)))

или с регулярным выражением

df %>%
  mutate(new.page = gsub('.*\\/', "/", old.page))
1 голос
/ 09 января 2020

Мы можем использовать str_remove

library(dplyr)
library(stringr)
df %>% 
     mutate(new.page = str_remove(old.page, ".*(?=/)"))
# A tibble: 5 x 2
#  old.page                           new.page          
#  <chr>                              <chr>             
#1 /blog/2018/9/28/my_article1        /my_article1      
#2 /blog/2013/05/22/1735              /1735             
#3 /blog/2013/02/27/my-goals          /my-goals         
#4 /blog/2013/01/23/leading-change    /leading-change   
#5 /blog/2013/11/19/2-blog-posts-in-1 /2-blog-posts-in-1

С str_extract мы извлекаем /, за которым следуют символы, которые не являются / до конца ($) строки

df %>% 
     mutate(new.page = str_extract(old.page, "/[^/]+$"))
...