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