姓が大文字で、名とミドルネームが通常の名前のセットがあります。
OBAMA Barack
DEL MONTE Alfredo
これらに分けたい
"OBAMA", "Barack"
"DEL MONTE", "Alfredo"
これを達成するためのpythonicの方法は何ですか?
>>> import itertools
>>> [
... ' '.join(items)
... for _, items in itertools.groupby('DEL MONTE Alfredo'.split(), str.isupper)
... ]
['DEL MONTE', 'Alfredo']
def split_names(names):
for s in names:
last_names = []
name_parts = s.split()
while name_parts and name_parts[0].isupper():
last_names.append(name_parts.pop(0))
yield ' '.join(last_names), ' '.join(name_parts)
names = ["OBAMA Barack", "DEL MONTE Alfredo"]
for last_name, first_name in split_names(names):
print last_name
print first_name
print
プリント:
OBAMA
Barack
DEL MONTE
Alfredo
You can use a simple regular expression:
import re
a = "DEL MONTE Alfredo"
first, last = re.match(r'([A-Z ]+)\s+(.+)', a).groups()
or loop thru a list of words and filter out all-uppercase ones:
first = ' '.join(w for w in a.split() if w.isupper())
last = ' '.join(w for w in a.split() if not w.isupper())
In my personal opinion, "the most pythonic" === "the simplest".
これを試してください:
(?![A-Z][a-z])([A-Z ]+) ([A-Z][a-z]+)