【发布时间】:2016-03-24 08:40:39
【问题描述】:
在 Perl 中,我可以同时进行替换和捕获组匹配。例如
my $string = "abcdef123";
$string =~ s/(\d+)//;
my $groupMatched = $1; # $groupMatched is 123
在 Python 中,我可以使用 re.sub 函数进行替换,如下所示。但是,如果不调用另一个函数 re.match 并执行附加操作,我找不到捕获 \d+ 组匹配的方法。
string = "abcdef123"
string = re.sub("(\d+)", "", string)
有谁知道我如何从同一个 re.sub 操作中捕获“\d+”匹配值作为单独的变量?我尝试了以下命令,但它不起作用。
print r'\1'
【问题讨论】:
-
我不确定这是否可能(至少同时),因为
re.sub的返回对象是一个字符串。如果你有类似rx_obj = re.search('123$', another_string)的东西,你会得到一个可以被rx_obj.group()捕获的 RE 对象。 -
猜你可能是对的,不可能同时做这两个。其他方法似乎有点骇人听闻,或者基本上是两个独立的步骤。
-
请注意,在 Perl 中,您应该始终在使用特殊编号的变量之前验证匹配是否成功:
if ($str =~ s/(\d+)//){ $x = $1; }