[Python-ideas] Give regex operations more sugar

Clint Hepner clint.hepner at gmail.com
Wed Jun 13 08:38:47 EDT 2018


> On 2018 Jun 13 , at 7:06 a, Ken Hilton <kenlhilton at gmail.com> wrote:
> 
> Hi all,
> 
> Regexes are really useful in many places, and to me it's sad to see the builtin "re" module having to resort to requiring a source string as an argument. It would be much more elegant to simply do "s.search(pattern)" than "re.search(pattern, s)".
> I suggest building all regex operations into the str class itself, as well as a new syntax for regular expressions.

I think you'll have to be more specific about why it is sad to pass strings to a function.

There already is a class that has all the methods you want, although with the roles of regex and string reversed
from what you want.

    >>> x = re.compile(r'[a-z]')  # x = !%a-z%!, or what have you
    >>> type(x)
    <type '_sre.SRE_Pattern'>
    >>> x.findall("1a3c5e7g9i")
    ['a', 'c', 'e', 'g', 'i']

Strictly speaking, a regular expression is just a string that encodes of a (non)deterministic finite automata.
A "regex" (the thing that supports all sorts of extensions that make the expression decidedly non-regular)
is a string that encodes ... some class of Turing machines.

[Aside: A discussion of just what they match can be found at
http://nikic.github.io/2012/06/15/The-true-power-of-regular-expressions.html, which suggests they can
match context-free languages, some (but possibly not all) context-sensitive languages, and maybe some languages
that context-sensitive grammars cannot not. Suffice it to say, they are powerful and complex.]

I don't think it is the job of the str class to build, store, and run the resulting machines, solely for the
sake of some perceived syntactic benefit.

I don't see any merit in adding regex literals beyond making Python look more like Perl.

--
Clint


More information about the Python-ideas mailing list