How to decipher :re.split(r"(\(\([^)]+\)\))" in the example
Albert-Jan Roskam
fomcl at yahoo.com
Fri Jul 11 11:18:09 EDT 2014
----- Original Message -----
> From: Steven D'Aprano <steve at pearwood.info>
> To: python-list at python.org
> Cc:
> Sent: Friday, July 11, 2014 11:04 AM
> Subject: Re: How to decipher :re.split(r"(\(\([^)]+\)\))" in the example
>> On 2014年7月10日 23:33:27 -0400, Roy Smith wrote:
>>> In article <mailman.11747.1405046292.18130.python-list at python.org>,
>> Tim Chase <python.list at tim.thechases.com> wrote:
>>>>> On 2014年07月10日 22:18, Roy Smith wrote:
>>> > > Outside this are \( and \): these are literal opening
> and closing
>>> > > bracket characters. So:
>>> > >
>>> > > \(\([^)]+\)\)
>>> >
>>> > although, even better would be to use to utterly awesome
>>> >> re.VERBOSE
>>> > flag, and write it as:
>>> >
>>> > \({2} [^)]+ \){2}
>>>>>> Or heck, use a multi-line verbose expression and comment it for
>>> clarity:
>>>>>> r = re.compile(r"""
>>> ( # begin a capture group
>>> \({2} # two literal "(" characters [^)]+
> # one or more
>>> non-close-paren characters \){2} # two literal
> ")"
>>> characters
>>> ) # close the capture group """,
> re.VERBOSE)
>>>>>> -tkc
>>>> Ugh. That reminds me of the classic commenting anti-pattern:
>> The sort of dead-simple commenting shown below is not just harmless but
> can be *critically important* for beginners, who otherwise may not know
> what "l = []" means.
>>> l = [] # create an empty list
>> for i in range(10): # iterate over the first 10 integers
>> l.append(i) # append each one to the list
>
Anything better than this hideous type of commenting: (?#...), e.g
>>> re.match("(19|20)[0-9]{2}(?#year)-[0-9]{2}(?#month)", "2010-12")
Same thing for the 'limsux' modifiers, although *maybe* they can be useful.
More information about the Python-list
mailing list