Vectorised over string
and pattern
.
Arguments
- string
Input vector. Either a character vector, or something coercible to one.
- pattern
Pattern to look for, as defined by an ICU regular expression. See stringi::stringi-search-regex for more details.
Value
For str_match
, a character matrix. First column is the
complete match, followed by one column for each capture group.
For str_match_all
, a list of character matrices.
See also
str_extract()
to extract the complete match,
stringi::stri_match()
for the underlying
implementation.
Examples
strings <- c(" 219 733 8965", "329-293-8753 ", "banana", "595 794 7569",
"387 287 6718", "apple", "233.398.9187 ", "482 952 3315",
"239 923 8115 and 842 566 4692", "Work: 579-499-7527", "$1000",
"Home: 543.355.3679")
phone <- "([2-9][0-9]{2})[- .]([0-9]{3})[- .]([0-9]{4})"
str_extract(strings, phone)
#> [1] "219 733 8965" "329-293-8753" NA "595 794 7569"
#> [5] "387 287 6718" NA "233.398.9187" "482 952 3315"
#> [9] "239 923 8115" "579-499-7527" NA "543.355.3679"
str_match(strings, phone)
#> [,1] [,2] [,3] [,4]
#> [1,] "219 733 8965" "219" "733" "8965"
#> [2,] "329-293-8753" "329" "293" "8753"
#> [3,] NA NA NA NA
#> [4,] "595 794 7569" "595" "794" "7569"
#> [5,] "387 287 6718" "387" "287" "6718"
#> [6,] NA NA NA NA
#> [7,] "233.398.9187" "233" "398" "9187"
#> [8,] "482 952 3315" "482" "952" "3315"
#> [9,] "239 923 8115" "239" "923" "8115"
#> [10,] "579-499-7527" "579" "499" "7527"
#> [11,] NA NA NA NA
#> [12,] "543.355.3679" "543" "355" "3679"
# Extract/match all
str_extract_all(strings, phone)
#> [[1]]
#> [1] "219 733 8965"
#>
#> [[2]]
#> [1] "329-293-8753"
#>
#> [[3]]
#> character(0)
#>
#> [[4]]
#> [1] "595 794 7569"
#>
#> [[5]]
#> [1] "387 287 6718"
#>
#> [[6]]
#> character(0)
#>
#> [[7]]
#> [1] "233.398.9187"
#>
#> [[8]]
#> [1] "482 952 3315"
#>
#> [[9]]
#> [1] "239 923 8115" "842 566 4692"
#>
#> [[10]]
#> [1] "579-499-7527"
#>
#> [[11]]
#> character(0)
#>
#> [[12]]
#> [1] "543.355.3679"
#>
str_match_all(strings, phone)
#> [[1]]
#> [,1] [,2] [,3] [,4]
#> [1,] "219 733 8965" "219" "733" "8965"
#>
#> [[2]]
#> [,1] [,2] [,3] [,4]
#> [1,] "329-293-8753" "329" "293" "8753"
#>
#> [[3]]
#> [,1] [,2] [,3] [,4]
#>
#> [[4]]
#> [,1] [,2] [,3] [,4]
#> [1,] "595 794 7569" "595" "794" "7569"
#>
#> [[5]]
#> [,1] [,2] [,3] [,4]
#> [1,] "387 287 6718" "387" "287" "6718"
#>
#> [[6]]
#> [,1] [,2] [,3] [,4]
#>
#> [[7]]
#> [,1] [,2] [,3] [,4]
#> [1,] "233.398.9187" "233" "398" "9187"
#>
#> [[8]]
#> [,1] [,2] [,3] [,4]
#> [1,] "482 952 3315" "482" "952" "3315"
#>
#> [[9]]
#> [,1] [,2] [,3] [,4]
#> [1,] "239 923 8115" "239" "923" "8115"
#> [2,] "842 566 4692" "842" "566" "4692"
#>
#> [[10]]
#> [,1] [,2] [,3] [,4]
#> [1,] "579-499-7527" "579" "499" "7527"
#>
#> [[11]]
#> [,1] [,2] [,3] [,4]
#>
#> [[12]]
#> [,1] [,2] [,3] [,4]
#> [1,] "543.355.3679" "543" "355" "3679"
#>
x <- c("<a> <b>", "<a> <>", "<a>", "", NA)
str_match(x, "<(.*?)> <(.*?)>")
#> [,1] [,2] [,3]
#> [1,] "<a> <b>" "a" "b"
#> [2,] "<a> <>" "a" ""
#> [3,] NA NA NA
#> [4,] NA NA NA
#> [5,] NA NA NA
str_match_all(x, "<(.*?)>")
#> [[1]]
#> [,1] [,2]
#> [1,] "<a>" "a"
#> [2,] "<b>" "b"
#>
#> [[2]]
#> [,1] [,2]
#> [1,] "<a>" "a"
#> [2,] "<>" ""
#>
#> [[3]]
#> [,1] [,2]
#> [1,] "<a>" "a"
#>
#> [[4]]
#> [,1] [,2]
#>
#> [[5]]
#> [,1] [,2]
#> [1,] NA NA
#>
str_extract(x, "<.*?>")
#> [1] "<a>" "<a>" "<a>" NA NA
str_extract_all(x, "<.*?>")
#> [[1]]
#> [1] "<a>" "<b>"
#>
#> [[2]]
#> [1] "<a>" "<>"
#>
#> [[3]]
#> [1] "<a>"
#>
#> [[4]]
#> character(0)
#>
#> [[5]]
#> [1] NA
#>