> 1) In perl:
$line = "The food is under the bar in the barn.";
if ( $line =~ /foo(.*)bar/ ) { print "got <$1>\n"; }
in python, I don't know how I can do this?
How does one capture the $1? (I know it is \1 but it is still not clear
how I can simply print it.
thanks
Fredrik Lundh <fr*****@python ware.com> wrote: "JZ" <wn******@mnovr yyb.pbz> wrote:
import re
line = "The food is under the bar in the barn."
if re.search(r'foo (.*)bar',line):
print 'got %s\n' % _.group(1)
Traceback (most recent call last):
File "jz.py", line 4, in ?
print 'got %s\n' % _.group(1)
NameError: name '_' is not defined
I've found that a slight irritation in python compared to perl - the
fact that you need to create a match object (rather than relying on
the silver thread of $_ (etc) running through your program ;-)
import re
line = "The food is under the bar in the barn."
m = re.search(r'foo (.*)bar',line)
if m:
print 'got %s\n' % m.group(1)
This becomes particularly irritating when using if, elif etc, to
match a series of regexps, eg
line = "123123"
m = re.search(r'^(\ d+)$', line)
if m:
print "int",int(m.gro up(1))
else:
m = re.search(r'^(\ d*\.\d*)$', line)
if m:
print "float",float(m .group(1))
else:
print "unknown thing", line
The indentation keeps growing which looks rather untidy compared to
the perl
$line = "123123";
if ($line =~ /^(\d+)$/) {
print "int $1\n";
}
elsif ($line =~ /^(\d*\.\d*)$/) {
print "float $1\n";
}
else {
print "unknown thing $line\n";
}
Is there an easy way round this? AFAIK you can't assign a variable in
a compound statement, so you can't use elif at all here and hence the
problem?
I suppose you could use a monstrosity like this, which relies on the
fact that list.append() returns None...
line = "123123"
m = []
if m.append(re.sea rch(r'^(\d+)$', line)) or m[-1]:
print "int",int(m[-1].group(1))
elif m.append(re.sea rch(r'^(\d*\.\d *)$', line)) or m[-1]:
print "float",flo at(m[-1].group(1))
else:
print "unknown thing", line
--
Nick Craig-Wood <ni**@craig-wood.com> --
http://www.craig-wood.com/nick