我在一个带有“'”中间姓名的字段中有很多名字。在最后..

我需要一个正则表达式来转换这个示例:

肯尼思·R。

进入

肯尼思

我试图建立自己的网站并发现了这个有用的网站顺便说一句..

http://www.gskinner.com/RegExr/

但我是 Perl 和正则表达式的新手,只能得到“...$” - 当名字末尾没有中间首字母时这是无用的...


我刚刚发现了另一种需要考虑的名称格式...'R。凯利”必须是“凯利”

有帮助吗?

解决方案

要删除最后一个“字”,如果它与点结束时:

my $name =~ s/\w+\.$//i;

(在此假设你没有之后的任何空间)

要去除与点结尾的任何字:

my $name =~ s/\w+\.//i;

看/ g的修改,如果你想将它们全部删除......

和BTW让自己的测试案例列表,检查您的解决方案 然后与现实世界的数据尝试,你可能会得到一些惊喜...

其他提示

为了照顾R。凯利案:

s/\w\. *//g

这是一个快速测试:

$ echo 'R. Kelly
Kenneth R.
R. Kemp R.
John Q. Smith' | perl -pe 's/\w\. *//g'
Kelly
Kenneth 
Kemp 
John Smith

我建议:

  1. 全局选项(g) 是必须的。
  2. 不区分大小写的选项 (i) 不是。
  3. 您可能会考虑寻找大写字母 ([:upper:]) 仅缩写。
  4. 应以怀疑的态度看待多个字符的“首字母缩写”。(所以 w+ 除非您的数据有相关案例,否则可能是一个错误。)
  5. perldoc perlre 了解更多信息。
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top