0

我希望将“eAlpha eBeta eGamma”转换为“fAlpha fBeta fGamma”。当然,这只是更复杂替换的简化示例。

这是我的 perl 程序:

my $data= "eAlpha eBeta eGamma";
$data=~ s/(e)(Alpha)|(e)(Beta)|(e)(Gamma)/f$2/g;
say $data;

输出是

fAlpha f f

Perl 正则表达式似乎记得 $1 但不记得 $2。有没有办法使用正则表达式替换、全局替换和捕获 $1、$2 等变量?

  • 替代品永远不会超过 3 个,所以我可以分三步完成,但不希望这样做。

任何帮助,将不胜感激。

4

2 回答 2

1

您可以使用交替使用正向展望,然后将其匹配e并替换为f.

my $data = "eAlpha eBeta eGamma";
$data=~ s/e(?=Alpha|Beta|Gamma)/f/g;
print($data);

印刷,

fAlpha fBeta fGamma
于 2018-12-27T08:49:21.427 回答
0

捕获组从左到右不“尊重” |. 所以Beta被俘虏了 in$4Gammain $6

但是您可以将其压缩为两组,另外使第一组不捕获?:(或者根本不使用组,因为它只是一个角色,但是您可能在“真实的东西”中还有其他东西这需要一个组)。

...
$data =~ s/(?:e)(Alpha|Beta|Gamma)/f$1/g;
...
于 2018-12-27T08:49:14.273 回答