如何删除中间的首字母和末尾的点?
-
22-07-2019 - |
题
我在一个带有“'”中间姓名的字段中有很多名字。在最后..
我需要一个正则表达式来转换这个示例:
肯尼思·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
我建议:
- 全局选项(
g
) 是必须的。 - 不区分大小写的选项 (
i
) 不是。 - 您可能会考虑寻找大写字母 (
[:upper:]
) 仅缩写。 - 应以怀疑的态度看待多个字符的“首字母缩写”。(所以
w+
除非您的数据有相关案例,否则可能是一个错误。) - 读
perldoc perlre
了解更多信息。
不隶属于 StackOverflow