首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在Perl中将人的全名解析为用户名?

如何在Perl中将人的全名解析为用户名?
EN

Stack Overflow用户
提问于 2008-12-18 19:10:08
回答 6查看 898关注 0票数 4

我需要把帕里西,肯尼斯的名字转换成kparisi格式。

有人知道如何在Perl中做到这一点吗?

以下是一些异常的样本数据:

Zelleb,Charles F.,四岁

Eilt,John,IV

Wods,Charles R.,,III

欢迎,小克雷格·P.

这些特定的名称最终应该是czelleb、jeilt、cwood、cwelkt等等。

我还有一个条件就是毁了我的名字建设者

奥尼尔,保罗

到目前为止,Vinko Vrsalovic的回答是,当奇怪/腐败的名字混在一起时,效果最好,但是上面的例子会成为“pneil”.如果我不能在p和n之间找到那个o,我就会被诅咒在犹大之下。

EN

回答 6

Stack Overflow用户

发布于 2008-12-18 19:18:42

首先,我将过滤异常数据,这样您就只能使用常规名称了。那么像这样的事情应该能起作用。

代码语言:javascript
复制
$t = "Parisi, Kenneth";
$t =~ s/(.+),\s*(.).*/\l$2\l$1/;
票数 6
EN

Stack Overflow用户

发布于 2008-12-18 19:14:30

尝试:

代码语言:javascript
复制
$name =~ s/(\w+),\s(\w)/$2$1/;
$name = lc $name;

这里的\w匹配一个字母数字字符。如果您想更具体一些,也可以使用[a-z],并传递i标志(大小写不敏感):

代码语言:javascript
复制
$name =~ s/([a-z]+)\s([a-z])/$2$1/i;
票数 4
EN

Stack Overflow用户

发布于 2008-12-20 00:59:17

这里有一个一行解决方案,假设您将所有的名称存储在一个名为“name”的文件中(每行一个),然后以某种方式进行重复的名称检测。

代码语言:javascript
复制
cat names | perl -e 'while(<>) {/^\s*(\S*)?,\s*(\S)/; print lc "$2$1\n";}' | sed s/\'//g
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/378864

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档