わかりましたので、基本的に私は彼らの名前の質問をしています。これは、名字と姓ではなく1つの入力にしたいのです。
この名前を分割する方法はありますか?「文」から最後の単語だけを取り出します。
name = "Thomas Winter"
print name.split()
出力されるのは「冬」だけです
このアプローチの主な問題は技術的な問題ではなく、人間の問題であることがわかります。さまざまな人がさまざまな方法で名前を書きます。
実際、「名」と「姓」という用語自体に欠陥があります。
多くの混血家系は、Smith-Jones のように、ハイフンで結ばれた姓を使用しますが、両方の名前が姓である "Smith Jones" のように、両方の名前を別々に使用する人もいます。
多くのヨーロッパの姓には、「de Vere」や「van den Neiulaar」など、複数の部分があります。これらのエキストラには、重要な家系の歴史がある場合があります。
副次的な問題: 私が参照している人々のために、これらを正しく大文字にしました。「de」と「van den」は、一部の家族では大文字になりませんが、他の家族では大文字になります。
逆に、多くのアジアの文化では、家族は個人よりも重要であると考えられているため、家族の名前を最初に置きます.
最後のポイント - 一部の人々は、「ジュニア」、「シニア」、または「III」であることを重視します。コードでは、これらを姓として扱うべきではありません。
また、両親から与えられたものではない名前を使用する人がかなりの数いることに注意して、私は次のスキームを使用してある程度の成功を収めました。
氏名 (メールの宛先として通常書かれるもの); 苗字; 知られている (会話で一般的に使用される名前)。
例えば:
フルネーム:ウィリアム・ゲイツ3世。姓:ゲイツ。として知られている: ビル
フルネーム: スン・リー; 苗字:宋。として知られている: リサ
単一の入力から名前を分割しようとする際の問題は、姓にスペースが含まれている人の完全な姓を取得できないことです。それを完全に管理するコードを記述できるとは思えません。
可能であれば、名前を個別に尋ねることをお勧めします。
これはかなり古い問題ですが、グロブ化された名前から断片を解析するための解決策を探し回っているのを見つけました。
あなたがPythonで尋ねたことを正確に行う簡単な方法は
name = "Thomas Winter"
LastName = name.split()[1]
(関数呼び出し分割の括弧に注意してください。)
split() は、各要素が元の文字列からのもので、空白で区切られたリストを作成します。name.split()[1] を使用して 2 番目の要素を取得するか、name.split()[-1] を使用して最後の要素を取得できるようになりました。
ただし、他の人が言ったように、「First_Name Last_Name」のような文字列を取得していると確信していない限り、さらに多くの問題が関係しています.
データの黄金律 - あまりにも早く集計しない - フィールドを分離するよりも、フィールドを結合する方がはるかに簡単です。ほとんどの人は、オプションのフィールドであるべきミドルネームも持っています。ミドルネームが多い人もいます。1 つの名前、1 つの単語しか持たない人もいます。一部の文化では一般的にミドル ネームの辞書があり、ゴルガフリンチャムの箱舟着陸までの家系図に敬意を表しています。
ここではコード ソリューションは必要ありません。ビジネス ルールが必要です。
このような:
print name.split()[-1]
これは私のアプリケーションでそれを行う方法です:
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')
PHP で人間の名前を解析しようとしている場合は、Keith Beckman の nameparse.php scriptをお勧めします。
人々が自分の名前を書く方法には非常に多くのバリエーションがあるため、正規表現を介して名/姓を取得する基本的な方法を次に示します。
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')
名前を分割することは、見た目よりも困難です。一部の名前には、姓が 2 語あります。ファーストネーム、ミドルネーム、ラストネームを入力する人もいます。一部の名前には、2 つの勤務先名があります。名前を処理するためのより信頼性の高い (または信頼性が最も低い) 方法は、姓と名を常に別々のフィールドで取得することです。もちろん、これは、名前が 1 つしかない人をどのように処理するか、名前の部分の順序が異なるユーザーに対して確実に機能するようにするなど、独自の問題を引き起こします。
名前は難しいので、取り扱いには注意してください。
表面に表示されるよりも間違いなく複雑な作業です。いくつかの課題とそれを解決するためのアルゴリズムをブログに書きました。PHPの最新バージョンが必要な場合は、必ず私のGoogleCodeプロジェクトをチェックしてください。
おそらく、これには rsplit を使用したいと思うでしょう:
rsplit([sep [,maxsplit]])
sep
区切り文字列として使用して、文字列内の単語のリストを返します。maxsplit
が指定されている場合、最大maxsplit
で右端の分割が行われます。sep
または が指定されていない場合None
、空白文字列は区切り文字です。右からの分割を除いて、以下で詳しく説明されているrsplit()
ように動作します。split()
バージョン 2.4 の新機能。
name = "Thomas Winter"
first, last = name.split()
print("First = {first}".format(first=first))
#First = Thomas
print("Last = {last}".format(last=" ".join(last)))
#Last = Winter
これに使えますstr.find()
。
x=input("enter your name ")
l=x.find(" ")
print("your first name is",x[:l])
print("your last name is",x[l:])
「名前、姓の形式で名前を書いてください」など、標準の形式を指定します(フォームによってはそれらを使用するものもあります)。
通常、名前にはコンマが含まれていないため、簡単になります。また、ユーザーが実際に名と姓の両方を入力することも確認します。
SQL でそれを行う方法は次のとおりです。しかし、この種のデータの正規化は本当に面倒です。個別の入力を求めることについて、Dave DuPlantis に同意します。