regexp in Python (from Perl)

MRAB google at mrabarnett.plus.com
Sun Oct 19 18:37:24 EDT 2008


On Oct 19, 5:47 pm, Bruno Desthuilliers
<bdesth.quelquech... at free.quelquepart.fr> wrote:
> Pat a écrit :
>
> > I have a regexp in Perl that converts the last digit of an ip address to
> >  '9'.  This is a very particular case so I don't want to go off on a
> > tangent of IP octets.
>
> >  ( my $s = $str ) =~ s/((\d+\.){3})\d+/${1}9/ ;
>
> > While I can do this in Python which accomplishes the same thing:
>
> > ip = ip[ :-1 ]
> > ip =+ '9'
>
> or:
>
> ip = ip[:-1]+"9"
>
> > I'm more interested, for my own edification in non-trivial cases, in how
> > one would convert the Perl RE to a Python RE that use groups.  I am
> > somewhat familiar using the group method from the re package but I
> > wanted to know if there was a one-line solution.
>
> Is that what you want ?
>
>  >>> re.sub(r'^(((\d+)\.){3})\d+$', "\g<1>9", "192.168.1.1")
> '192.168.1.9'
>
> >>> re.sub(r'^(((\d+)\.){3})\d+$', "\g<1>9", "192.168.1.100")
>
> '192.168.1.9'

The regular expression changes the last sequence of digits to
"9" ("192.168.1.100" => "192.168.1.9") but the other code replaces the
last digit ("192.168.1.100" => "192.168.1.109").



More information about the Python-list mailing list