如何在末尾用点删除中间的首字母?

时间:2009-01-15 16:12:38

标签: regex perl parsing expression

我在一个字段中有一堆名字,带有'。'的中间首字母。最后..

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

Kenneth R.

成为

肯尼斯

我正在努力建立自己的,并找到了这个有用的网站btw ..

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

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


我刚刚找到了另一个需要考虑的名称格式......'R.凯莉'需要成为'凯莉'

2 个答案:

答案 0 :(得分:3)

如果以dot:

结尾,则删除最后一个“单词”
my $name =~ s/\w+\.$//i;

(这假设你之后没有任何空格)

删除任何以dot结尾的单词:

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

如果要将它们全部删除,请查看/ g修饰符...

和BTW让自己成为测试用例列表来检查您的解决方案 然后尝试使用真实的单词数据,你可能会得到一些惊喜......

答案 1 :(得分:2)

照顾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了解详情。