GitHunt
GA

gadenbuie/regexplain

🔍 An RStudio addin slash regex utility belt

RegExplain

Regular expressions are tricky. RegExplain makes it easier to see what you’re doing.

Project Status: Active – The project has reached a stable, usable state and is being actively developed.
CRAN_Status_Badge

RegExplain is an RStudio addin slash utility belt for regular
expressions. Interactively build your regexp, check the output of common
string matching functions, consult the interactive help pages, or use
the included resources to learn regular expressions. And more.

Inspired by RegExr.com and stringr::str_view().

Installation

Installation is easy with remotes

# install.packages("remotes")
remotes::install_github("gadenbuie/regexplain")

RegExplain in Action

Overview

regexplain selection

Regular Expressions Library

regexplain library

Try the Built-In Examples

regexplain examples

RStudio Addin

The main feature of this package is the RStudio Addin RegExplain
Selection
. Just select the text or object containing text (such as the
variable name of a vector or a data.frame column) and run RegExplain
Selection
from the RStudio Addins dropdown.

regexplain in the Rstudio Addins dropdown

You can also open the addin with regexplain_gadget(). This allows you
to pass text or a regular expression to the gadget, which is useful when
you want to work with a regular expression in your code or environment.

regexplain_gadget(text_vector, "\\b(red|blue|green): \\d{3}")

The addin will open an interface with 4 panes where you can

  • edit the text you’ve imported
  • build up a regex expression and interactively see it applied to
    your text
  • test the output of common string matching and replacement
    functions from base and stringr
  • and refer to a helpful cheatsheet

The panes of regexplain

When you’re done, click on the Send Regex to Console to send your
regex expression to… the console!

> pattern <- "\\b(red|orange|yellow|green|blue|purple|white|brown)(?:\\s(\\w+))?"

Notice that RegExplain handled the extra backslashes needed for
storing the RegEx characters \b, \s, and \w. Inside the gadget you
can use regular old regular expressions as you found them in the wild
(hello, Stack
Overflow
!).

Help and Cheat Sheet

The Help tab is full of resources, guides, and R packages and
includes an easy-to-navigate reference of commonly used regular
expression syntax.

regexplain help windows

Open RegExplain Cheatsheet from the RStudio Addins drop down to open
the regex reference page in the Viewer pane without blocking your
current R session.

Import Your Text

There are two ways to get your text into RegExplain. The first way was
described above: select an object name or lines of text or code in the
RStudio source pane and run RegExplain Selection. To import text
from a file, use RegExplain File to you import the text you want to
process with regular expressions.

When importing text, RegExplain automatically reduces the text to the
unique entries and limits the number of lines.

regexplain addins

Regular Expressions Library

The RegExplain gadget includes a regular expressions library in the
RegEx tab. The library features common regular expressions, sourced
from qdapRegex and Regex
Hub
, with several additional
patterns.

The full library is stored as a JSON file in
inst/extdata/patterns.json, feel free to
contribute patterns you find useful or use regularly via pull request.

regexplain library modal

View Static Regex Results

RegExplain provides the function view_regex() that you can use as a
stringr::str_view() replacement. In addition to highlighting matched
portions of the text, view_regex() colorizes groups and attempts to
colorize the regex expression itself as well.

text <- c("breakfast=eggs;lunch=pizza",
          "breakfast=bacon;lunch=spaghetti", 
          "no food here")
pattern <- "((\\w+)=)(\\w+).+(ch=s?p)"

view_regex(text, pattern)

Example view_regex(text, pattern).

t_nested <- "anestedgroupwithingroupexample"
r_nested <- "(a(nested)(group(within(group))(example)))"
view_regex(t_nested, r_nested)

Example of nested groups

Notes

Regular expressions are nothing if not a collection of corner cases.
Trying to pass regular expressions through Shiny and HTML inputs is a
bit of a labyrinth. For now, assume any issues or oddities you
experience with this addin are entirely my fault and have nothing to do
with the fine packages this addin is built on. If you do find an issue,
please file an issue. Pull
requests are welcomed!