如何提取名字和姓氏的非大写字符串元素?

2024-10-02 12:30:40 发布

您现在位置:Python中文网/ 问答频道 /正文

我有这种形式的字符串

NAME Firstame

我想得到Firstname部分。字符串可以更复杂(LAST LAST2 First First2)。规则是大写的元素是姓,其余的是名。我们可以假设第一部分将是大写(=姓),当它开始是混合大小写时,它是第一个名字,直到结束。你知道吗

我确信正确的regex组合[A-Z]\w会起作用。我想到的最好的办法是

import re
re.findall('[A-Z]*\w+', 'LAST LAST2 First First2')

但是它几乎返回了正确的解决方案(['LAST', 'LAST2', 'First', 'First2']

在Python中将这个名字提取为一个字符串的好方法是什么?你知道吗


Tags: 字符串namere元素规则firstname名字形式
3条回答

我想提出一个非正则表达式的解决方案:

string = 'LAST LAST2 First First2'
words = string.split(' ') # equals ['LAST', 'LAST2', 'First', 'First2']
result = []
for word in words:
    if not word.isupper():
        result.append(word)
print(' '.join(result))

结果:

First First2

尝试:

import re
re.findall('\b[A-Z][a-z0-9_-]+', 'LAST LAST2 First First2')

这将导致:

# Run findall
>>> regex.findall(string)
[u'First', u'First2']

带正则表达式:

import re
s = 'LAST LAST2 First First2'
print re.search("[A-Z][a-z].*$",s).group().split()
  • [A-Z]匹配a和Z之间的单个字符 (区分大小写)
  • [a-z]匹配 a和z之间的范围(区分大小写)
  • .*匹配任何字符 (新行除外)量词:介于零次和无限次之间,如 尽可能的多次,按需回馈[贪婪]
  • $断言 在字符串末尾的位置

非正则表达式

s = 'LAST LAST2 First First2'
print [i for i in s.split() if not i.isupper()]

[输出]:

['First', 'First2']

相关问题 更多 >

    热门问题