R: Extract Data From All Regular Expression Matches Into a Data...

re_exec_all {rematch2} | R Documentation

## Extract Data From All Regular Expression Matches Into a Data Frame

### Description

Match a regular expression to a string, and return matches, match positions, and capture groups. This function is like its `match` counterpart, except it returns match/capture group start and end positions in addition to the matched values.

### Usage

    re_exec_all(text, pattern, perl = TRUE, ...)

### Arguments

`text` | Character vector.
`pattern` | A regular expression. See `regex` for more about regular expressions.
`perl` | logical should perl compatible regular expressions be used? Defaults to TRUE, setting to FALSE will disable capture groups.
`...` | Additional arguments to pass to `gregexpr` (or `regexpr` if `text` is of length zero).

### Value

A tidy data frame (see Section “Tidy Data”). The entries within the match records within the list columns will be one vectors as long as there are matches for the corresponding text element.

### Tidy Data

The return value is a tidy data frame where each row corresponds to an element of the input character vector `text`. The values from `text` appear for reference in the `.text` character column. All other columns are list columns containing the match data. The `.match` column contains the match information for full regular expression matches while other columns correspond to capture groups if there are any, and PCRE matches are enabled with `perl = TRUE` (this is on by default). If capture groups are named the corresponding columns will bear those names.

Each match data column list contains match records, one for each element in `text`. A match record is a named list, with entries `match`, `start` and `end` that are respectively the matching (sub) string, the start, and the end positions (using one based indexing).

### Extracting Match Data

To make it easier to extract matching substrings or positions, a special `$` operator is defined on match columns, both for the `.match` column and the columns corresponding to the capture groups. See examples below.

### See Also

`gregexpr`, which this function wraps

Other tidy regular expression matching: `re_exec`, `re_match_all`, `re_match`

### Examples

    name_rex <- paste0(
      "(?<first>[[:upper:]][[:lower:]]+) ",
      "(?<last>[[:upper:]][[:lower:]]+)"
    )
    notables <- c(
      "  Ben Franklin and Jefferson Davis",
      "\tMillard Fillmore"
    )
    # All occurrences
    allpos <- re_exec_all(notables, name_rex)
    allpos

    # Custom $ to extract matches and positions
    allpos$first$match
    allpos$first$start
    allpos$first$end

[Package rematch2 version 2.0.1 Index]