Question about regular expression

Emile van Sebille emile at fenx.com
Wed Sep 30 23:58:10 EDT 2015


On 9/30/2015 12:20 PM, Tim Chase wrote:
> On 2015-09-30 11:34, massi_srb at msn.com wrote:
<snip>
>> I guess this problem can be tackled with regular expressions, b
> ... However, if you *want* to do it with
> regular expressions, you can.  It's ugly and might be fragile, but
>
> #############################################################
> import re
> s = "name1 name2(1) name3 name4 (1, 4) name5(2) ..."
> r = re.compile(r"""
>      \b       # start at a word boundary
>      (\w+)    # capture the word
>      \s*      # optional whitespace
>      (?:      # start an optional grouping for things in the parens
>       \(      # a literal open-paren
>        \s*    # optional whitespace
>        (\d+)  # capture the number in those parens
>        (?:    # start a second optional grouping for the stuff after a comma
>         \s*   # optional whitespace
>         ,     # a literal comma
>         \s*   # optional whitespace
>         (\d+) # the second number
>        )?     # make the command and following number optional
>       \)      # a literal close-paren
>      )?       # make that stuff in parens optional
>      """, re.X)
> d = {}
> for m in r.finditer(s):
>      a, b, c  = m.groups()
>      d[a] = (int(b or 0), int(c or 0))
>
> from pprint import pprint
> pprint(d)
> #############################################################

:)

>
> I'd stick with the commented version of the regexp if you were to use
> this anywhere so that others can follow what you're doing.

... and this is why I use python.  That looks too much like a hex sector 
disk dump rot /x20.  :)

No-really-that's-sick-ly yr's,

Emile







More information about the Python-list mailing list