> 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 <[EMAIL PROTECTED]> wrote: > "JZ" <[EMAIL PROTECTED]> 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.group(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.search(r'^(\d+)$', line)) or m[-1]: print "int",int(m[-1].group(1)) elif m.append(re.search(r'^(\d*\.\d*)$', line)) or m[-1]: print "float",float(m[-1].group(1)) else: print "unknown thing", line -- Nick Craig-Wood <[EMAIL PROTECTED]> -- http://www.craig-wood.com/nick -- http://mail.python.org/mailman/listinfo/python-list