3

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

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

Kenneth R.

into

Kenneth

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

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

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


我刚刚找到了另一种需要考虑的名称格式...'R. 凯利'需要是'凯利'

4

2 回答 2

3

如果它以 dot 结尾,则删除最后一个“单词”:

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

(这假设你在那之后没有任何空间)

要删除以点结尾的任何单词:

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

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

顺便说一句,为自己制作一个测试用例列表来检查您的解决方案,然后尝试使用真实的单词数据,您可能会得到一些惊喜......

于 2009-01-15T16:17:53.247 回答
2

处理 R. Kelly 案:

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以获取更多信息。
于 2009-01-15T21:18:00.783 回答