作者AntaresStar ()
看板Perl
标题Re: [问题] 判断与取代
时间Tue Jul 1 22:04:29 2014
刚刚稍早po的不对 重po一次
%replace_list可以这样生 (我改叫%h 短一点)
@h{'a' .. 'z'} = @h{'A' .. 'Z'} = (1 .. 9, map {0} 1 .. 17);
然後replace_abc_123可以这样写
$output = join "", map {exists $h{$_} ? $h{$_} : $_} split //, $string;
※ 引述《Neisseria (Neisseria)》之铭言:
: 提供某一种解法,参考看看...
: 假设一个杂凑 %replace_list,里面放的是字母和数字的对应
: 即 a=1 b=2 c=3 ...
: 写一个函数来替换字母,在转换前,先将字母转小写
: sub replace_abc_123 {
: my $string = shift;
: my $output = "";
: for my $e (split //, $string) {
: if ($e =~ /[[:alpha:]]/) {
: $output .= $replace_list{lc $e};
: }
: else {
: $output .= $e
: }
: }
: return $output;
: }
: 然後用常规表示式将要替换的地方抓出来
: 用刚写好的函数来替换掉即可
: 完整的例子可看连结 http://pastebin.com/Cf9Pk1hV
: 参考看看罗
: ※ 引述《sosojopoor (KeiDanX)》之铭言:
: : 各位板上前辈大家好
: : 小弟我刚接触perl有些问题想请教
: : 主要是判断&取代的问题
: : -----------原始码-----------
: : (port I0 (direction INPUT))
: : (instance (rename ABC_1def "CBA.gh3") (viewRef X)
: : (portRef I0 (instanceRef ABC_1def))
: : (portRef I1 (instanceRef iJk_1def))
: : (port LO (direction OUTPUT))
: : (portRef O (instanceRef ABC_1def))
: : -----------判断&修改後-----------
: : (port I0 (direction INPUT))
: : (instance (rename 123_1456 "321.783") (viewRef X)
: : (portRef I0 (instanceRef 123_1456))
: : (portRef I1 (instanceRef 901_1456))
: : (port LO (direction OUTPUT))
: : (portRef O (instanceRef 123_1456))
: : 有两个关键字分别为"rename"和"instanceRef"
: : 1.rename
: : 判断到有rename後将第一个与第二个空白键中的a-Z换成数字
: : 若超过9则为0 也就是a/A=1 b/B=2 ... i/I=9 j/J=0
: : 同时随後两个"内的字串依照上述取代
: : 2.instanceRef
: : 判断到有rename後将第一个空白键与第一个)内的a-Z换成数字
: : 取代的规则与前述相同
: : 尝试使用if判断与tr
: : 但一直卡在只取代 第一与第二个空白键内的a-Z 这边
: : 请问有人知道该如何处理吗? 谢谢
--
※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 114.43.171.239
※ 文章网址: http://webptt.com/cn.aspx?n=bbs/Perl/M.1404223470.A.D55.html
1F:推 CindyLinz:map {0} 1 .. 17 的部分可以写作 (0) x 17 07/02 00:58
2F:→ CindyLinz:exists $h{$_} ? $h{$_} : $_ 刚好可以写作 $h{$_}//$_ 07/02 01:00
3F:→ CindyLinz:因为 %h 里面有放的东西都不是 undef 07/02 01:00
4F:推 CindyLinz:然後 join "" .. split //, $string 可以改作: 07/02 01:02
5F:→ CindyLinz:$output = $string =~ s/[a-zA-Z]/$h{$&}/gr; 07/02 01:02
6F:推 cutekid:想请教: $h{$_}//$_ 是什麽意思呢 :) 07/02 08:23
8F:推 CindyLinz:// 是看左边有没有 defined() 有的话用左边, 不然用右边 07/02 17:20
9F:推 cutekid:推 a 大笔记及 C 大 解说。谢谢二位 :) 07/03 08:05
10F:→ AntaresStar:括号0真的很微妙 我早先试是用0 x 17就不行 07/03 16:43
11F:推 CindyLinz:(0) 是 list, 0 是 scalar 呀~ x 配 list 是 repeat 它 07/04 23:40
12F:→ CindyLinz:0 x 17 的话是 scalar, 那是把 0 这个字接 N 次的字串 07/04 23:41