--- title: "Before and After" date: "`r Sys.Date()`" output: rmarkdown::html_vignette vignette: > %\VignetteIndexEntry{Before and After} %\VignetteEngine{knitr::rmarkdown} %\VignetteEncoding{UTF-8} --- ```{r setup, include = FALSE} knitr::opts_chunk$set( collapse = TRUE, comment = "#>" ) ``` Often, we want the part of a string that comes before or after a given pattern. ```{r load} library(strex) ``` ## Before `str_before_nth()` gives you the part of a string before the `n`^th^ appearance of a pattern. It has the friends `str_before_first()` and `str_before_last()`. ```{r before} string <- "ab..cd..de..fg..h" str_before_first(string, "e") str_before_nth(string, "\\.", 3) str_before_last(string, "\\.") str_before_nth(string, ".", -3) str_before_nth(rep(string, 2), fixed("."), -3) ``` ## After `str_after_nth()` gives you the part of a string after the `n`^th^ appearance of a pattern. It has the friends `str_after_first()` and `str_after_last()`. ```{r after} string <- "ab..cd..de..fg..h" str_after_first(string, "e") str_after_nth(string, "\\.", 3) str_after_last(string, "\\.") str_after_nth(string, ".", -3) str_after_nth(rep(string, 2), fixed("."), -3) ``` ## A more concrete example ```{r james-harry} string <- "James did the cooking, Harry did the cleaning." ``` Let's write a function to figure out which task each of the lads did. ```{r get-task} library(magrittr) get_task <- function(string, name) { str_c(name, " did the ") %>% str_after_first(string, .) %>% str_before_first("[\\.,]") } get_task(string, "James") get_task(string, "Harry") ``` `get_task()` would have been more difficult to write without `str_after_first()` and `str_before_first()`.