从具有多个标点符号的字符串中拆分名字和姓氏的优雅方法

时间:2017-09-29 13:44:36

标签: python

我有一个脚本,我需要从字符串中提取名字和姓氏并翻转两个。字符串如下所示:

  

名称:姓氏,名字

我遇到了解决问题的方法:

if "name: " in line:
    for nameValue, fname in [q.split(",") for q in line.split(";")]:
       for name, lname in [q.split(":") for q in cnvalue.split(";")]:
           nameFinal=fname.strip() + " " + lname.strip()

我想知道是否会有更优雅的方式来编写这一简单的代码。

3 个答案:

答案 0 :(得分:0)

这有点乱,但它确实有效:

s = 'Name: John, Doe'
print ' '.join(s[6:].replace(" ", "").split(',')[::-1])
>> Doe John

答案 1 :(得分:0)

这应该有效:

if line.startswith('Name: '):
    lastname, firstname = line.lstrip('Name: ').split(', ')

答案 2 :(得分:0)

如果你确定你的行总是这种格式,你也可以尝试使用正则表达式,例如:

>>> import re
>>> s = "Name: Lastname, Firstname"
>>> p = re.compile(r"Name: (\w+), (\w+)$")
>>> p.sub(r'\2 \1', s)
'Firstname Lastname'
>>> 

或更少的行:

>>> import re
>>> s = "Name: Lastname, Firstname"
>>> re.sub(r"Name: (\w+), (\w+)$", r'\2 \1', s)
'Firstname Lastname'
>>>

实际上很容易测试线是否匹配(或不是),也可以随意创建所需的输出格式。