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