在Perl中特定位置的整数自增

4

我有一个这样的字符串:

1,2,4 0:5 1:10 3:14

我想将其转换为

1,2,4 1:5 2:10 4:14

只需将“:”前的数字增加1。

我尝试过:

perl -w -e '$s="1,2,4 0:5 1:10 3:14"; 
$s =~ s/([0-9]*):/print(($1+1).":")/ge; 
print("$s\n");'

这个奇怪地返回了

1:2:4:1,2,4 15 110 114

有没有实现我的目标的简单方法?
1个回答

11
你已经接近正确,但需要匹配至少一个数字,后面跟着冒号:,替换部分必须返回所需的结果,而不是打印它。
my $s = "1,2,4 0:5 1:10 3:14"; 
$s =~ s/([0-9]+) (?=:)/ $1+1 /xge; 
print $s, "\n";

它起作用了,谢谢! 你能解释一下“?=”和“x”(在xge中)的变化是什么吗? - vervenumen
1
好的!我从http://perldoc.perl.org/perlre.html#Regular-Expressions得知这是一个前瞻断言。非常棒!再次感谢! - vervenumen
@vervenumen (?= ) 是正向先行断言(不进入 $1),而 /x 则忽略空格/换行符,当您想编写一个正则表达式时,这可能更容易阅读/维护。 - mpapec

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接