如何在re.sub中评估替换部分?
我有一个字符串,比如说 '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 个回答
5
你可以通过给 re.sub
的 repl
参数提供一个函数来使用它,具体可以参考这个链接:
如果
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()
,它会返回整个匹配的内容:如果正则表达式定义了多个组,你可能需要指定组的索引。