从荷兰名称中获取前缀

2024-05-23 20:01:21 发布

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

我在Django上与来自荷兰的用户建立了社交网络。 通过我的站点,我可以获得荷兰名称,例如,Jap van der Stael,我只需要获得van der部分。对于这个名字,这不是一个问题,但是如何从一个像Jap van der Vulpen-Odijk这样的名字中得到中缀呢

现在我有下一个代码:

last_name_1 = 'van der Vulpen'
last_name_2 = 'van der Vulpen - Odijk'

' '.join(last_name_1.split()[:-1] -> 'van der'
' '.join(last_name_2.split()[:-1] -> 'van der Vulpen -'

如何为姓氏返回清除前缀\u 2

一些可能的名称示例:

nijveldt - affourtit -> ''
van Eldik -> 'van'
deHart -> 'de'
NIEUWBURG -> ''
Heuvel van den -> 'van den'
van deven -. 'van'
Koerten - de Jong -> 'de'
vanBARNEVELD -> 'van'

Tags: django用户name名称de名字vansplit
1条回答
网友
1楼 · 发布于 2024-05-23 20:01:21

我的理解是,在荷兰,这些中间部分总是小写的。因此,这应该是可行的:

def get_prefix(name):
    return " ".join([x for x in name.split(" ") if x.islower()])

这个解决方案的好处是“-”不算作小写,所以它也被过滤掉了。但是,如果名称的“适当”部分不是大写,那么我们就有问题了。要解决这个问题,我们必须将字符串整体考虑如下:

def get_prefix_v2(name):
    parts = name.split(" ")
    i = len(parts) - 2
    while i >= 0:
        if parts[i] == "-":
            i -= 2
        else:
            return " ".join(parts[1:i+1])

但是,此函数仍然假定您有名字和姓氏。你可以考虑的另一件事是找到有效的前缀值并将其拉出来:

valid_prefix_parts = set(["van", "de", "den"])
def get_prefix_v3(name):
    parts = []
    last_name_found = False
    for part in name.split(" "):
        if part in valid_prefix_parts:
            last_name_found = True
            parts.append(part)
        else:
            prefixes = list(filter(lambda prefix: part.startswith(prefix), valid_prefix_parts))
            if any(prefixes):
                parts.append(prefixes[0])
            elif last_name_found:
                break
    return " ".join(parts)

相关问题 更多 >