在Python中分隔名字,姓氏和年份

时间:2015-11-22 21:25:17

标签: python

我在使用Python创建此程序时遇到问题。我希望它将名字缩写为小写,并将姓氏缩写为小写,但是使用大写' N'。我也试图将第一个名字中的字符数添加到年份。

示例:因此,当用户输入(" Lynn NOLAN 1994")时,Python应该返回," lynnNolan1998"

到目前为止,我有:

def findName(s):
    index = s.find(" ")
    lowerFirst = s[ :index].lower()
    capitalizedLast = s[index+1:index-1].capitalize()
    year = s[index+1: ].strip()
num = year + len(lowerFirst)
return lowerFirst + capitalizedLast + num

我可能会离开,但我对Python很新。如果我能得到有关如何解决这个问题的任何提示,那就太棒了!

3 个答案:

答案 0 :(得分:2)

Python有很多有用的字符串方法可以帮助解决这类问题:

In [1]: s = 'Lynn NOLAN 1994'

In [2]: f = s.split()

In [3]: f[0].lower() + f[1].title() + str(int(f[2])+len(f[0]))
Out[3]: 'lynnNolan1998'

答案 1 :(得分:1)

使用re.sub()savings groups只是另一种解决方案:

In [1]: import re
In [2]: s = "Lynn NOLAN 1994"

In [3]: def replacement(x):
   ...:     group1, group2, group3 = x.groups()
   ...:     return group1.lower() + group2.capitalize() + str(int(group3) + len(group1))
   ...: 

In [4]: re.sub(r"(.*?) (.*?) (\d{4})", replacement, s)
Out[4]: 'lynnNolan1998'

请注意,在当前状态下,此解决方案缺少错误处理。

答案 2 :(得分:0)

没有正则表达式:

>s = "Lynn NOLAN 1994"
>split_list = s.split()
>split_list[0].lower() + split_list[1].capitalize() + str(int(split_list[2]) + len(split_list[0]))
'lynnNolan1998'