startswith: Detect Pattern Occurrences at Start or End of Strings

Description

Determines if a string starts or ends with a match to a specified fixed pattern.

Usage

startsWith(
  x,
  pattern = prefix,
  ...,
  ignore_case = ignore.case,
  fixed = TRUE,
  ignore.case = FALSE,
  prefix
)

endsWith(
  x,
  pattern = suffix,
  ...,
  ignore_case = ignore.case,
  fixed = TRUE,
  ignore.case = FALSE,
  suffix
)

Arguments

x

character vector whose elements are to be examined

pattern

character vector with patterns to search for

...

further arguments to stri_startswith and stri_endswith, e.g., locale

ignore_case

single logical value; indicates whether matching should be case-insensitive

fixed

single logical value; TRUE for fixed pattern matching (see about_search_fixed); NA for the Unicode collation algorithm (about_search_coll); FALSE is not supported – use grepl instead

ignore.case

alias to the ignore_case argument [DEPRECATED]

prefix, suffix

aliases to the pattern argument [DEPRECATED]

Details

These functions are fully vectorised with respect to both arguments.

For matching with regular expressions, see grepl with patterns like "^prefix" and "suffix$".

Value

Each function returns a logical vector, indicating whether a pattern match has been detected or not. They preserve the attributes of the longest inputs (unless they are dropped due to coercion).

Differences from Base R

Replacements for base startsWith and endsWith implemented with stri_startswith and stri_endswith.

  • there are inconsistencies between the argument order and naming in grepl, strsplit, and startsWith (amongst others); e.g., where the needle can precede the haystack, the use of the forward pipe operator, |>, is less convenient [fixed here]

  • grepl also features the ignore.case argument [added here]

  • partial recycling without the usual warning [fixed here]

  • no attributes preserved whatsoever [fixed here]

  • not suitable for natural language processing [fixed here – use fixed=NA]

Author(s)

Marek Gagolewski

See Also

The official online manual of stringx at https://stringx.gagolewski.com/

Related function(s): grepl, substr

Examples

startsWith("ababa", c("a", "ab", "aba", "baba", NA))
## [1]  TRUE  TRUE  TRUE FALSE    NA
outer(
    c("aba", "abb", "abc", "baba", "bac"),
    c("A", "B", "C"),
    endsWith,
    ignore_case=TRUE
)
##       [,1]  [,2]  [,3]
## [1,]  TRUE FALSE FALSE
## [2,] FALSE  TRUE FALSE
## [3,] FALSE FALSE  TRUE
## [4,]  TRUE FALSE FALSE
## [5,] FALSE FALSE  TRUE
x <- c("Mario", "mario", "M\u00E1rio", "M\u00C1RIO", "Mar\u00EDa", "Rosario")
x[startsWith(x, "mario", ignore_case=TRUE)]
## [1] "Mario" "mario"
x[startsWith(x, "mario", fixed=NA, strength=1L)]
## [1] "Mario" "mario" "Mário" "MÁRIO"