2014-01-17 79 views
1

我想用数字对应替换字符串。Perl用数字替换26个字符

例如(在Windows上的一行):

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

结果是:

12345678999999999999999999 

这工作,直到9,但我怎么能字符后,我分配数字记者?
我想知道我怎么可以将2号以一个1个符号,

例如,

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

要确定的数值它会是有意义的分配

"1-", "2-", ... "25-", "26". 

回答

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

+0

就是这样,非常感谢。我不知道ord()。是否有可能在一个海豚1-2-3-4 .....- 26-? – giordano

+0

@giordano ///'的第二部分只是Perl代码。所以'(ord($ 1) - 96)。 “-''。 –

+0

谢谢。我不知道有可能以这种方式使用括号。现在我明白你的意思是“只是Perl”:它不是正则表达式语法。非常感谢。 – giordano

2

我不相信tr///可以做到这一点,不幸的是 - 这是一对一的字符替换。所以你必须走很长的路:

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

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

+0

感谢您的信息和代码。对类似的问题是有帮助的。 – giordano