gpt4 book ai didi

python - 正则表达式命名组

转载 作者:太空宇宙 更新时间:2023-11-03 21:44:54 24 4
gpt4 key购买 nike

我想要一个正则表达式来捕获“James Allen”和“Allen, James”等名称,并带有命名组的第一个和最后一个。这是我所拥有的:

(?P<first>\w+), (?P<last>\w+)|(?P<last>\w+) (?P<first>\w+)

但它导致了子模式命名错误。我该如何修复它,使其仅匹配其中一种模式。我想保留组名称“first”和“last”。

最佳答案

命名符号组需要一个名称。它的形式为 (?P<name>...) 。在您的示例中,您忘记提供组的名称。

不幸的是,组名不能重复使用,因此以下是错误。

re.compile(r'(?P<last>\w+), (?P<first>\w+)|(?P<first>\w+) (?P<last>\w+)')
# sre_constants.error: redefinition of group name 'first' ...

发生上述错误是因为re不够聪明,无法知道每个名称中只有一个会被匹配。因此,您必须捕获该模式,然后提取 firstlast .

import re

def get_name(name):
match = re.match(r'(\w+), (\w+)|(\w+) (\w+)', name)

return {'first': match[2] or match[3], 'last': match[1] or match[4]}

print(get_name('James Allen'))
print(get_name('Allen, James'))

输出

{'first': 'James', 'last': 'Allen'}
{'first': 'James', 'last': 'Allen'}

关于python - 正则表达式命名组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52574311/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com