skip to navigation
skip to content

PPeg 0.9.3

A Python port of Lua's LPeg pattern matching library

Latest Version: 0.9.4

PPeg is a pattern matching library for Python, based on Parsing Expression Grammars (PEGs). It’s a port of the LPeg library from Lua.

Warning

PPeg is still experimental. The API and semantics are not stable.

Usage

Unlike the re module [1], PPeg patterns can handle balanced sequences

>>> from _ppeg import Pattern as P
>>> pattern = P.Grammar('(' + ( (P(1)-P.Set('()')) | P.Var(0) )**0 + ')')
>>> pattern('(foo(bar()baz))').pos
15
>>> pattern('(foo(bar(baz)').pos
-1
>>> capture = P.Cap(pattern)
>>> capture('(foo(bar()baz))').captures
['(foo(bar()baz))']

This example corresponds roughly to the following LPeg example

> lpeg = require "lpeg"
> pattern = lpeg.P{ "(" * ((1 - lpeg.S"()") + lpeg.V(1))^0 * ")" }
> pattern:match("(foo(bar()baz))") -- Lua indexes begin at 1
16
> pattern:match("(foo(bar(baz)")
nil
> capture = lpeg.C(pattern)
> capture:match("(foo(bar()baz))")
"(foo(bar()baz))"
[1]Some regular expression implementations (e.g. PCRE, regex) support recursive patterns, which can match balanced sequences.

Modules

  • _cpeg.c

  • _ppeg.c
    • includes lpeg.c
 
File Type Py Version Uploaded on Size
PPeg-0.9.3.tar.gz (md5) Source 2015-11-05 44KB