Filter list paragraphs

Filter list paragraphs by splitting input on blank lines, testing each paragraph against the Match pattern, and keeping (or dropping, with Invert) those that match. IMPORTANT: paragraphs MUST be separated by blank lines - back-to-back lines without blanks are treated as a single paragraph. Same pattern semantics as Filter list lines, applied to blank-line-delimited blocks instead of lines.

Input
Ready
Output
Live

Paragraph-level text filtering

Input is split on `/\n\s*\n/` - one or more blank/whitespace-only lines. Each resulting paragraph is tested against the pattern as a single string. A match anywhere in the paragraph passes the filter (in Contains mode); Starts with / Ends with anchor to the paragraph's first/last line respectively (after trim).

Default pattern is `Error` with mode Contains - paragraphs mentioning errors stay, others drop. Toggle Invert to keep only non-matching paragraphs (e.g. filter OUT error logs to see normal activity).

If your paragraphs are NOT blank-line-separated (e.g. single-line items), use Filter list lines instead. Same op family, line-level granularity.

How to use filter list paragraphs

  1. 1Paste paragraphs separated by blank lines
  2. 2Set Match pattern (default `Error`)
  3. 3Pick Mode: Contains, Equals, Starts with, Ends with, or Regex
  4. 4Toggle Invert to exclude matching paragraphs instead
  5. 5Output is blank-line-separated paragraphs that match (or don't match, if Invert is on)

Keyboard shortcuts

Drive ListShift without touching the mouse.

Shortcut Action
Ctrl ZUndo last input change
Ctrl Shift ZRedo
Ctrl Shift EnterToggle fullscreen focus on the editor
EscExit fullscreen
Ctrl KOpen the command palette to jump to any tool
Ctrl SSave current pipeline draft Plus
Ctrl PRun a saved pipeline Plus

What this tool actually does

Blank-line-delimited paragraph filter. Pattern matches against the whole paragraph.

Blank-line paragraph detection

Paragraphs are separated by one or more blank / whitespace-only lines. Back-to-back non-blank lines form a single paragraph. Split regex: `/\n\s*\n/`.

Five match modes

Contains (default), Equals (exact paragraph text, trimmed), Starts with (first line after trim), Ends with (last line after trim), Regex (full regex against paragraph text).

Invert toggle

Flips the filter - keeps non-matching paragraphs. Useful for dropping noise (e.g. Invert + pattern `Error` keeps non-error paragraphs).

Whole word + Case sensitive

Whole word wraps the pattern in `\b...\b` for word-boundary matching. Case sensitive off (default) makes the match case-insensitive. Ignored in Regex mode (encode it yourself).

Invalid regex returns input unchanged

Malformed regex does not break the output - status bar shows "Invalid regex" and the input passes through.

Worked example

Four paragraphs separated by blank lines. Default pattern `Error` in Contains mode keeps the two error paragraphs.

Input
System initialized successfully.
All subsystems reporting healthy status.

Error: Unable to connect to database.
The connection timed out after 30 seconds.

Database connection established.
Transaction log now active.

Error: Timeout during request.
Client received HTTP 504.
Output
Error: Unable to connect to database.
The connection timed out after 30 seconds.

Error: Timeout during request.
Client received HTTP 504.

Settings reference

How each option shapes the output using the sample above (4 paragraphs).

Setting What it does Effect on the sample
Pattern: `Error` (default), Mode: Contains Keeps paragraphs containing `Error` 2 Error paragraphs kept
Invert: on Drops matching paragraphs Keeps `System initialized...` and `Database connection...`
Mode: Starts with, Pattern: `Error` Keeps paragraphs whose first line starts with `Error` Same as Contains on this sample
Mode: Regex, Pattern: `(?i)error|fail` Full regex match All paragraphs mentioning error OR failure
No blank lines in input (warning) Entire input is ONE paragraph Filter passes or drops the whole input as a block

FAQ

Why does my input produce no output change?
Likely your paragraphs are not separated by blank lines - the entire input is being treated as one paragraph. Add blank lines between paragraphs, or use Filter list lines for line-level filtering.
How is this different from Filter list lines?
Filter list lines tests each LINE against the pattern. This tool tests each PARAGRAPH (blank-line-separated block). Pick based on your input's structure.
Does the pattern match anywhere in the paragraph?
Contains mode: yes, anywhere in the paragraph text. Starts with / Ends with: anchored to the paragraph's first/last line after trimming. Equals: the entire trimmed paragraph text must equal the pattern.
What if the regex is invalid?
Input passes through unchanged and the status bar shows "Invalid regex". No data loss.
Can I filter by multiple patterns at once?
Use Mode = Regex with alternation: `Error|Warning|Fatal`. The pattern field supports any valid JavaScript regex in Regex mode.