如何评估re.sub中的替换部件?

时间:2013-03-15 08:52:09

标签: python regex

我有一个字符串'Alex 28'。现在,我想提取数字28并使用正则表达式将其加2。

在Perl中,我可以这样得到它:

#!/usr/bin/perl
use strict;
use warnings;

my $str='Alex 28';
$str=~s/(\d+)/$1+2/e;

为了在Python中实现这一点,我尝试了以下内容:

#!/usr/bin/python

import re

str = 'Alex 28'

match=re.sub(r'(\d+)',r'\g<1>',str)

如何在已提取的“\g<1>”中添加2?我尝试使用int函数,它无法正常工作。请帮忙。

版本:Python 2.7.3

1 个答案:

答案 0 :(得分:4)

您可以supplying a function to the repl argument使用re.sub

  

如果repl是一个函数,则会针对每个非重叠的模式调用它。该函数接受一个匹配对象参数,并返回替换字符串。

例如:

def add_two(match):
    return str(int(match.group()) + 2)

s = 'Alex 28'
re.sub(r'(\d+)', add_two, s)

或者,使用lambda:

re.sub(r'(\d+)', lambda m: str(int(m.group()) + 2), s)

请注意:

  • 使用str作为变量名是一个不错的选择,因为它会覆盖内置str
  • 替换仅使用字符串,因此作为repl参数传递的函数应返回一个字符串
  • 我使用match.group()返回整个匹配:如果正则表达式定义了多个组,则可能需要指定组索引。