我需要将Parisi,Kenneth格式的名称转换为kparisi格式.
有谁知道如何在Perl中这样做?
以下是一些异常的示例数据:
Zelleb,Charles F.,, IV
Eilt,John ,, IV Wods,
Charles R.,, III
Welkt,Craig P.,, Jr.
这些特定的名称最终应该是czelleb,jeilt,cwoods,cwelkt等.
我还有一个条件正在破坏我的名字建设者
奥尼尔,保罗
到目前为止,当奇怪/腐败的名字在混合中时,Vinko Vrsalovic的答案是最好的,但上面的这个例子将作为"pneil"出现......如果我不能在p和n之间得到那个,那么我会被判断为低于犹大
vinko@parrot:~$ cat genlogname.pl
use strict; use warnings; my @list; push @list, "Zelleb, Charles F.,,IV"; push @list, "Eilt, John,, IV"; push @list, "Woods, Charles R.,,III"; push @list, "Welkt, Craig P.,,Jr."; for my $name (@list) { print gen_logname($name)."\n"; } sub gen_logname { my $n = shift; #Filter out unneeded characters $n =~ s/['-]//g; #This regex will grab the lastname a comma, optionally a space (the #optional space is my addition) and the first char of the name, #which seems to satisfy your condition $n =~ m/(\w+), ?(.)/; return lc($2.$1); }
vinko@parrot:~$ perl genlogname.pl czelleb jeilt cwoods cwelkt
我将从过滤异常数据开始,因此您只有常规名称.那么这样的事情应该可以解决问题
$t = "Parisi, Kenneth"; $t =~ s/(.+),\s*(.).*/\l$2\l$1/;