繁体   English   中英

用大写单词拆分一串单词

[英]Split a string of words by uppercase words

我有一组名字,姓氏是大写的,中间名和中间名是正常的,例如

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

您可以使用简单的正则表达式:

import re

a = "DEL MONTE Alfredo"
first, last = re.match(r'([A-Z ]+)\s+(.+)', a).groups()

或循环通过单词列表并过滤掉全大写的单词:

first = ' '.join(w for w in a.split() if w.isupper())
last =  ' '.join(w for w in a.split() if not w.isupper())

在我个人看来,“最pythonic”===“最简单”。

试试这个:

(?![A-Z][a-z])([A-Z ]+) ([A-Z][a-z]+)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM