如何将Perl的split命令与空白区域修剪结合起来?
发布时间:2020-12-15 23:30:40 所属栏目:大数据 来源:网络整理
导读:Repost from Perlmonks为同事: 我编写了一个perl脚本来分隔由分号分隔的长电子邮件列表.我想用代码做的是将分割与白色空间的修剪相结合,所以我不需要两个数组.加载第一个数组时是否需要修剪.输出是一个排序的名称列表. 谢谢. #!/pw/prod/svr4/bin/perluse w
Repost from Perlmonks为同事:
我编写了一个perl脚本来分隔由分号分隔的长电子邮件列表.我想用代码做的是将分割与白色空间的修剪相结合,所以我不需要两个数组.加载第一个数组时是否需要修剪.输出是一个排序的名称列表. #!/pw/prod/svr4/bin/perl use warnings; use strict; my $file_data = 'Builder,Bob ;Stein,Franklin MSW; Boop,Elizabeth PHD Cc: Bear,+ Izzy'; my @email_list; $file_data =~ s/CC:/;/ig; $file_data =~ s/PHD//ig; $file_data =~ s/MSW//ig; my @tmp_data = split( /;/,$file_data ); foreach my $entry (@tmp_data) { $entry =~ s/^[ t]+|[ t]+$//g; push( @email_list,$entry ); } foreach my $name ( sort(@email_list) ) { print "$name n"; } 解决方法
您不必使用相同的功能一次完成两个操作.有时单独执行操作可能更清楚.也就是说,首先拆分,然后从每个元素中删除空格(然后对结果进行排序):
@email_list = sort( map { s/s*(S+)s*/1/; $_ } split ';',$file_data ); 编辑:同时剥离一个以上的字符串的一部分可能导致陷阱,例如思南的观点是关于在“伊丽莎白”部分留下尾随空格.我编写了该代码片段,假设名称不会有内部空格,这实际上是非常错误的,如果我有意识地注意到它,它会突出显示不正确.代码在下面得到了很大改进(也更具可读性): @email_list = sort( map { s/^s+//; # strip leading spaces s/s+$//; # strip trailing spaces $_ # return the modified string } split ';',$file_data ); (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |