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

Gur*_*uru 1 python regex

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

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

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

my $str='Alex 28';
$str=~s/(\d+)/$1+2/e;
Run Code Online (Sandbox Code Playgroud)

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

#!/usr/bin/python

import re

str = 'Alex 28'

match=re.sub(r'(\d+)',r'\g<1>',str)
Run Code Online (Sandbox Code Playgroud)

如何将 2 添加到\g<1>已获取的 ' ' 上?我尝试使用 int 函数,它不起作用。请帮忙。

版本:Python 2.7.3

ice*_*ime 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)
Run Code Online (Sandbox Code Playgroud)

或者,使用 lambda:

re.sub(r'(\d+)', lambda m: str(int(m.group()) + 2), s)
Run Code Online (Sandbox Code Playgroud)

请注意:

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