parse for strings

Parse columns from string data using a simple pattern or a supplied regular expression.

Signature

> parse {flags} (pattern)

Flags

  • --regex, -r: use full regex syntax for patterns

Parameters

  • pattern: The pattern to match.

Input/output types:

inputoutput
list<any>table
stringtable

Examples

Parse a string into two named columns

> "hi there" | parse "{foo} {bar}"
╭───┬─────┬───────╮
 # │ foo │  bar  │
├───┼─────┼───────┤
 0 hi there
╰───┴─────┴───────╯

This is how the first example is interpreted in the source code

> "hi there" | parse --regex '(?s)\A(?P<foo>.*?) (?P<bar>.*?)\z'
╭───┬─────┬───────╮
 # │ foo │  bar  │
├───┼─────┼───────┤
 0 hi there
╰───┴─────┴───────╯

Parse a string using fancy-regex named capture group pattern

> "foo bar." | parse --regex '\s*(?<name>\w+)(?=\.)'
╭───┬──────╮
 # │ name │
├───┼──────┤
 0 bar
╰───┴──────╯

Parse a string using fancy-regex capture group pattern

> "foo! bar." | parse --regex '(\w+)(?=\.)|(\w+)(?=!)'
╭───┬──────────┬──────────╮
 # │ capture0 │ capture1 │
├───┼──────────┼──────────┤
 0 foo
 1 bar
╰───┴──────────┴──────────╯

Parse a string using fancy-regex look behind pattern

> " @another(foo bar)   " | parse --regex '\s*(?<=[() ])(@\w+)(\([^)]*\))?\s*'
╭───┬──────────┬───────────╮
 # │ capture0 │ capture1  │
├───┼──────────┼───────────┤
 0 @another (foo bar) 
╰───┴──────────┴───────────╯

Parse a string using fancy-regex look ahead atomic group pattern

> "abcd" | parse --regex '^a(bc(?=d)|b)cd$'
╭───┬──────────╮
 # │ capture0 │
├───┼──────────┤
 0 b
╰───┴──────────╯

Notes

The parse command always uses regular expressions even when you use a simple pattern. If a simple pattern is supplied, parse will transform that pattern into a regular expression.