首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >将西班牙姓氏拆分为第一个姓氏和第二个姓氏的请求

将西班牙姓氏拆分为第一个姓氏和第二个姓氏的请求
EN

Stack Overflow用户
提问于 2021-04-27 08:05:57
回答 2查看 230关注 0票数 0

我的目标是编写一个python3函数,该函数将csv中的姓氏作为行,并将它们正确地拆分为lastname_1和lastname_2。

西班牙语名称具有以下结构:firstname + lastname_1 + lastname_2

忘了名字,我想要一个代码,将姓氏分成这两个类别(lastname_1,lastname_2),这是一个挑战吗?

有时姓氏有介词。

第一个姓是“lastname

  • MATIAS de
  • DE blas”,第二个是" ZAPATA“,第二个是"Matias”,“
    • ”是lastname_1,"de LA mano“是lastname_1,DE villaverda lastname_2
    • DE MIGUEL Del corral De Miguel是lastname_1,DEL CORRAL lastname_2 More: Vidal de la solis SOLIS lastname_2是surtname_1,DE la pena surname_2
    • MONTAVA del DEL Arco Montava是surname_1 Del ARCO surname_2

名单还会继续下去。

我目前陷入困境,我找到了this code in perl,但我很难理解它背后的主要思想,以便将其翻译为python3。

代码语言:javascript
复制
import re

preposition_lst = ['DE LO ', 'DE LA ', 'DE LAS ', 'DEL ', 'DELS ', 'DE LES ', 'DO ', 'DA ', 'DOS ', 'DAS', 'DE ']
cases = ["DE BLAS ZAPATA", "MATIAS DE LA MANO", "LOPEZ FERNANDEZ DE VILLAVERDE", "DE MIGUEL DEL CORRAL", "VIDAL DE LA PEÑA", "MONTAVA DEL ARCO", "DOS CASAS VALLE"]

for case in cases:
  for prep in preposition_lst:
    m = re.search(f"(.*)({prep}[A-ZÀ-ÚÄ-Ü]+)", case, re.I) # re.I makes it case insensitive
    try:
      print(m.groups())
      print(prep)
    except:
      pass
EN

回答 2

Stack Overflow用户

发布于 2021-04-27 21:40:04

试试这个:

代码语言:javascript
复制
import re

preposition_lst = ['DE','LO','LA','LAS','DEL','DELS','LES','DO','DA','DOS','DAS']
cases = ["DE BLAS ZAPATA", "MATIAS DE LA MANO", "LOPEZ FERNANDEZ DE VILLAVERDE", "DE MIGUEL DEL CORRAL", "VIDAL DE LA PEÑA", "MONTAVA DEL ARCO", "DOS CASAS VALLE"]



def last_name(name):
    case=re.findall(r'\w+',name)
    res=list(filter(lambda x: x not in preposition_lst,case))
    return res

list_final =[]
for case in cases:
    list_final.append(last_name(case))

for i in range(len(list_final)):
    if len(list_final[i])>2:
        name1=' '.join(list_final[i][:2])
        name2=' '.join(list_final[i][2:])
        list_final[i]=[name1,name2]
print(list_final)
#[['BLAS', 'ZAPATA'], ['MATIAS', 'MANO'], ['LOPEZ FERNANDEZ', 'VILLAVERDE'], ['MIGUEL', 'CORRAL'], ['VIDAL', 'PE�A'], ['MONTAVA', 'ARCO'], ['CASAS', 'VALLE']]
票数 0
EN

Stack Overflow用户

发布于 2021-04-29 16:06:55

这符合你的要求吗?

代码语言:javascript
复制
import re

preposition_lst = ['DE LO', 'DE LA', 'DE LAS', 'DE LES', 'DEL', 'DELS', 'DO', 'DA', 'DOS', 'DAS', 'DE']
cases = ["DE BLAS ZAPATA", "MATIAS DE LA MANO", "LOPEZ FERNANDEZ DE VILLAVERDE", "DE MIGUEL DEL CORRAL", "VIDAL DE LA PENA SOLIS", "MONTAVA DEL ARCO", "DOS CASAS VALLE"]

def split_name(name):
    f1 = re.compile("(.*)({preps}(.+))".format(preps = "(" + " |".join(preposition_lst) + ")"))
    m1 = f1.match(case)

    if m1:
        if len(m1.group(1)) != 0:
            return m1.group(1).strip(), m1.group(2).strip()
        else:
            return " ".join(name.split()[:-1]), name.split()[-1]
    else:
        return " ".join(name.split()[:-1]), name.split()[-1]

for case in cases:
    first, second = split_name(case)
    print("{} --> name 1 = {}, name 2 = {}".format(case, first, second))

# DE BLAS ZAPATA --> name 1 = DE BLAS, name 2 = ZAPATA
# MATIAS DE LA MANO --> name 1 = MATIAS, name 2 = DE LA MANO
# LOPEZ FERNANDEZ DE VILLAVERDE --> name 1 = LOPEZ FERNANDEZ, name 2 = DE VILLAVERDE
# DE MIGUEL DEL CORRAL --> name 1 = DE MIGUEL, name 2 = DEL CORRAL
# VIDAL DE LA PENA SOLIS --> name 1 = VIDAL, name 2 = DE LA PENA SOLIS
# MONTAVA DEL ARCO --> name 1 = MONTAVA, name 2 = DEL ARCO
# DOS CASAS VALLE --> name 1 = DOS CASAS, name 2 = VALLE
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/67279185

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档