Perl用数字替换26个字符

时间:2014-01-17 07:38:36

标签: regex perl tr

我想用数字通讯符替换字符串。

例如(Windows上的单行):

perl -e "$_ = \"abcdefghijklmnopqrstuvwxyz\"; tr\a-z\1-9\;"

结果是:

12345678999999999999999999  

这可以工作到9但我怎么能在字符i后分配数字通讯员?
我想知道如何将2个符号分配给1个符号,

例如,

12 -> j, 13 -> k, etc.

要识别数值,分配

是有意义的
"1-", "2-", ... "25-", "26". 

2 个答案:

答案 0 :(得分:5)

perl -E"$_ = 'abcdefghijklmnopqrstuvwxyz'; s/([a-z])/ord($1)-96/ge; say;"

或者如果你有5.14 +

perl -E"say 'abcdefghijklmnopqrstuvwxyz' =~ s/([a-z])/ord($1)-96/ger;"

您可以替换任何规则而不是ord($1) - 96

答案 1 :(得分:2)

我不相信tr///可以做到这一点 - 这是一对一的角色替换。所以你将不得不走很长的路:

my %indicies = map { $_ => (ord($_) - ord('a')) + 1 } ('a' .. 'z');
my $result = join '', map { $indicies{$_} } split(//, $string);

不幸的是,这不是一个单行。