我需要把帕里西,肯尼斯的名字转换成kparisi格式。
有人知道如何在Perl中做到这一点吗?
以下是一些异常的样本数据:
Zelleb,Charles F.,四岁
Eilt,John,IV
Wods,Charles R.,,III
欢迎,小克雷格·P.
这些特定的名称最终应该是czelleb、jeilt、cwood、cwelkt等等。
我还有一个条件就是毁了我的名字建设者
奥尼尔,保罗
到目前为止,Vinko Vrsalovic的回答是,当奇怪/腐败的名字混在一起时,效果最好,但是上面的例子会成为“pneil”.如果我不能在p和n之间找到那个o,我就会被诅咒在犹大之下。
发布于 2008-12-18 19:18:42
首先,我将过滤异常数据,这样您就只能使用常规名称了。那么像这样的事情应该能起作用。
$t = "Parisi, Kenneth";
$t =~ s/(.+),\s*(.).*/\l$2\l$1/;发布于 2008-12-18 19:14:30
尝试:
$name =~ s/(\w+),\s(\w)/$2$1/;
$name = lc $name;这里的\w匹配一个字母数字字符。如果您想更具体一些,也可以使用[a-z],并传递i标志(大小写不敏感):
$name =~ s/([a-z]+)\s([a-z])/$2$1/i;发布于 2008-12-20 00:59:17
这里有一个一行解决方案,假设您将所有的名称存储在一个名为“name”的文件中(每行一个),然后以某种方式进行重复的名称检测。
cat names | perl -e 'while(<>) {/^\s*(\S*)?,\s*(\S)/; print lc "$2$1\n";}' | sed s/\'//ghttps://stackoverflow.com/questions/378864
复制相似问题