On 9/30/2015 12:20 PM, Tim Chase wrote:
On 2015-09-30 11:34, massi_...@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




--
https://mail.python.org/mailman/listinfo/python-list

Reply via email to