我在一个字段中有一堆名字,中间的首字母带有“。” 最后..
我需要一个正则表达式来转换这个例子:
Kenneth R.
into
Kenneth
我试图建立自己的并发现这个有用的网站顺便说一句..
http://www.gskinner.com/RegExr/
但我Perl 和正则表达式的新手,只能得到 "...$" - 当名字的末尾没有中间首字母时,这是没用的......
我刚刚找到了另一种需要考虑的名称格式...'R. 凯利'需要是'凯利'
我在一个字段中有一堆名字,中间的首字母带有“。” 最后..
我需要一个正则表达式来转换这个例子:
Kenneth R.
into
Kenneth
我试图建立自己的并发现这个有用的网站顺便说一句..
http://www.gskinner.com/RegExr/
但我Perl 和正则表达式的新手,只能得到 "...$" - 当名字的末尾没有中间首字母时,这是没用的......
如果它以 dot 结尾,则删除最后一个“单词”:
my $name =~ s/\w+\.$//i;
(这假设你在那之后没有任何空间)
要删除以点结尾的任何单词:
my $name =~ s/\w+\.//i;
如果要全部删除它们,请查看 /g 修饰符...
顺便说一句,为自己制作一个测试用例列表来检查您的解决方案,然后尝试使用真实的单词数据,您可能会得到一些惊喜......
处理 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
我建议:
g
) 是必需的。i
) 不是。[:upper:]
) 首字母。w+
除非您的数据有相关案例,否则这可能是一个错误。)perldoc perlre
以获取更多信息。