Splitting a person's name into forename and surname

前端 未结 16 1940
北海茫月
北海茫月 2020-12-05 10:46

ok so basically I am asking the question of their name I want this to be one input rather than Forename and Surname.

Now is there any way of splitting this name? and

相关标签:
16条回答
  • 2020-12-05 11:04

    You'll find that your key problem with this approach isn't a technical one, but a human one - different people write their names in different ways.

    In fact, the terminology of "forename" and "surname" is itself flawed.

    While many blended families use a hyphenated family name, such as Smith-Jones, there are some who just use both names separately, "Smith Jones" where both names are the family name.

    Many european family names have multiple parts, such as "de Vere" and "van den Neiulaar". Sometimes these extras have important family history - for example, a prefix awarded by a king hundreds of years ago.

    Side issue: I've capitalised these correctly for the people I'm referencing - "de" and "van den" don't get captial letters for some families, but do for others.

    Conversely, many Asian cultures put the family name first, because the family is considered more important than the individual.

    Last point - some people place great store in being "Junior" or "Senior" or "III" - and your code shouldn't treat those as the family name.

    Also noting that there are a fair number of people who use a name that isn't the one bestowed by their parents, I've used the following scheme with some success:

    Full Name (as normally written for addressing mail); Family Name; Known As (the name commonly used in conversation).

    e.g:

    Full Name: William Gates III; Family Name: Gates; Known As: Bill

    Full Name: Soong Li; Family Name: Soong; Known As: Lisa

    0 讨论(0)
  • 2020-12-05 11:04

    Here's how to do it in SQL. But data normalization with this kind of thing is really a bear. I agree with Dave DuPlantis about asking for separate inputs.

    0 讨论(0)
  • 2020-12-05 11:05

    You would probably want to use rsplit for this:

    rsplit([sep [,maxsplit]])
    

    Return a list of the words in the string, using sep as the delimiter string. If maxsplit is given, at most maxsplit splits are done, the rightmost ones. If sep is not specified or None, any whitespace string is a separator. Except for splitting from the right, rsplit() behaves like split() which is described in detail below. New in version 2.4.

    0 讨论(0)
  • 2020-12-05 11:06

    Since there are so many different variation's of how people write their names, but here's how a basic way to get the first/lastname via regex.

    import re
    p = re.compile(r'^(\s+)?(Mr(\.)?|Mrs(\.)?)?(?P<FIRST_NAME>.+)(\s+)(?P<LAST_NAME>.+)$', re.IGNORECASE)
    m = p.match('Mr. Dingo Bat')
    if(m != None):
      first_name = m.group('FIRST_NAME')
      last_name = m.group('LAST_NAME')
    
    0 讨论(0)
  • 2020-12-05 11:08

    This is how I do it in my application:

    def get_first_name(fullname):
        firstname = ''
        try:
            firstname = fullname.split()[0] 
        except Exception as e:
            print str(e)
        return firstname
    
    def get_last_name(fullname):
        lastname = ''
        try:
            index=0
            for part in fullname.split():
                if index > 0:
                    if index > 1:
                        lastname += ' ' 
                    lastname +=  part
                index += 1
        except Exception as e:
                print str(e)
        return lastname
    
    def get_last_word(string):
        return string.split()[-1]
    
    print get_first_name('Jim Van Loon')
    print get_last_name('Jim Van Loon')
    print get_last_word('Jim Van Loon')
    
    0 讨论(0)
  • 2020-12-05 11:12

    An easy way to do exactly what you asked in python is

    name = "Thomas Winter"
    LastName = name.split()[1]
    

    (note the parantheses on the function call split.)

    split() creates a list where each element is from your original string, delimited by whitespace. You can now grab the second element using name.split()[1] or the last element using name.split()[-1]

    However, as others said, unless you're SURE you're just getting a string like "First_Name Last_Name", there are a lot more issues involved.

    0 讨论(0)
提交回复
热议问题