Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/308.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在python中,如何删除名称的中间首字母?_Python_Python 2.7 - Fatal编程技术网

在python中,如何删除名称的中间首字母?

在python中,如何删除名称的中间首字母?,python,python-2.7,Python,Python 2.7,我想弄明白一些事情似乎应该很简单。我正在尝试从名称中删除中间的首字母,但我不知道如何在不为字母表中的每个字母创建replace()的情况下执行此操作。这就是我要找的: (开始时为) “约翰·D·史密斯” “罗伯特·约翰逊” (完) “约翰·史密斯” “罗伯特·约翰逊” 用Python实现上述功能的最简单方法是什么?中间的首字母是随机的,但总是被空白包围。内置的字符串操作使这非常容易 name = "Name N Name".split() # Splits string at whitespac

我想弄明白一些事情似乎应该很简单。我正在尝试从名称中删除中间的首字母,但我不知道如何在不为字母表中的每个字母创建replace()的情况下执行此操作。这就是我要找的:

(开始时为)

“约翰·D·史密斯”

“罗伯特·约翰逊”

(完)

“约翰·史密斯”

“罗伯特·约翰逊”


用Python实现上述功能的最简单方法是什么?中间的首字母是随机的,但总是被空白包围。

内置的字符串操作使这非常容易

name = "Name N Name".split() # Splits string at whitespace into list
del name[1] # Deletes 2nd item (middle initial)
removed_middle_initial = " ".join(name) # "Name Name"
[name.split()[0] + " " + name.split()[2] for name in names]

这是假设名字和姓氏不包含任何空格字符。如果需要更高级的要求,那么您显然需要处理这些条件。

根据您的帖子,这可能会有所帮助

>>> import re
>>> re.sub(' [A-Z]* ', ' ', "John D Smith")
'John Smith'
>>> re.sub(' [A-Z]* ', ' ', "Robert B Johnson")
'Robert Johnson'
(?=)
用于前瞻<代码>[A-Z]表示1个字母的首字母

import re
re.sub(' [A-Z](?= )', '', "John D Smith")
可以使用该方法将中间的首字母替换为空格

>>> re.sub("\s[A-Za-z]\s", " ", "John D Smith")
John Smith

这是使用
\s
字母字符类查找第一个由空格包围的字母。然后,它用一个空格替换整个3个字符串(空格、字母、空格)。

re.sub(“[a-Z]*”,““John D Smith”)?是否保证每个输入名称都有一个中间首字母?或者会有一些名字只是“firstname lastname”,你想保持不变吗?记住,实际上,名字是很棘手的。你怎么处理像“乔治·R·马丁”这样的东西?对名字的解析有一些有趣的想法。BAE,这正是我需要的。我甚至没有意识到Python有一个正则表达式模块。你太棒了。而且,不管是谁拒绝,都是一个巨魔,我在网站的任何地方都找不到类似的问题。@Matthew我也很好奇为什么我的答案被否决了。或者没有多次调用
split
“”。join(c代表I,c在enumerate(names.split())中,如果I!=1)
作为注释发布,因为它确实在做同样的事情,只是不同而已……的确如此。我试图思考如何做到这一点而不分裂两次,这显然是这样做的方式。谢谢@Larsks,我想知道为什么被否决了。根据发布的信息,我的答案很有效。如果发布更多的信息,我会给出更详细和一般的答案。我竖起大拇指,它工作得很好。我也会尽快给你正确的答案。