affectation in if statement
Chris Rebert
clp2 at rebertia.com
Tue Mar 16 03:58:23 EDT 2010
On Tue, Mar 16, 2010 at 12:45 AM, samb <sam.bancal at gmail.com> wrote:
> Hi,
>
> I'm trying to do something like :
>
> if m = re.match(r'define\s+(\S+)\s*{$', line):
> thing = m.group(1)
> elif m = re.match(r'include\s+(\S+)$', line):
> thing = m.group(1)
> else
> thing = ""
>
> But in fact I'm not allowed to affect a variable in "if" statement.
> My code should then look like :
>
> if re.match(r'define\s+(\S+)\s*{$', line):
> m = re.match(r'define\s+(\S+)\s*{$', line)
> thing = m.group(1)
> elif re.match(r'include\s+(\S+)$', line):
> m = re.match(r'include\s+(\S+)$', line)
> thing = m.group(1)
> else
> thing = ""
>
> Which is not nice because I'm doing twice the same instruction
> or like :
>
> m = re.match(r'define\s+(\S+)\s*{$', line)
> if m:
> thing = m.group(1)
> else:
> m = re.match(r'include\s+(\S+)$', line)
> if m:
> thing = m.group(1)
> else
> thing = ""
>
> Which isn't nice neither because I'm going to have maybe 20 match
> tests and I wouldn't like to have 20 indentations.
>
> Anyone a recommendation?
def extract_thing(line):
for regex in (r'define\s+(\S+)\s*{$', r'include\s+(\S+)$'):
m = re.match(regex, line)
if m: return m.group(1)
return ""
Or if the real code is more complicated than your example:
def extract_thing(line):
m = re.match(r'define\s+(\S+)\s*{$', line)
if m: return m.group(1)
m = re.match(r'include\s+(\S+)$', line)
if m: return m.group(1)
#etc...
return ""
Cheers,
Chris
--
http://blog.rebertia.com
More information about the Python-list
mailing list