Nushell
Get Nu!
Getting Started
  • The Nushell Book
  • Command Reference
  • Cookbook
  • Language Reference Guide
  • Contributing Guide
Blog
  • English
  • 中文
  • Deutsch
  • Français
  • Español
  • 日本語
  • Português do Brasil
  • Русский язык
GitHub
Get Nu!
Getting Started
  • The Nushell Book
  • Command Reference
  • Cookbook
  • Language Reference Guide
  • Contributing Guide
Blog
  • English
  • 中文
  • Deutsch
  • Français
  • Español
  • 日本語
  • Português do Brasil
  • Русский язык
GitHub
  • Categories

    • Bits
    • Bytes
    • Chart
    • Conversions
    • Core
    • Database
    • Dataframe
    • Dataframe Or Lazyframe
    • Date
    • Debug
    • Default
    • Env
    • Experimental
    • Expression
    • Filesystem
    • Filters
    • Formats
    • Generators
    • Hash
    • History
    • Lazyframe
    • Math
    • Misc
    • Network
    • Path
    • Platform
    • Plugin
    • Prompt
    • Random
    • Removed
    • Shells
    • Strings
    • System
    • Viewers

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
stringtable
list<any>table

Examples

Parse a string into two named columns

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

Parse a string, ignoring a column with _

> "hello world" | parse "{foo} {_}"
╭───┬───────╮
│ # │  foo  │
├───┼───────┤
│ 0 │ hello │
╰───┴───────╯

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.