为什么按词边界扩展(拆分)列表不工作?



我有两个列表。我想使用name_list2

的元素拆分每个name_list1元素(字符串)
name_list1 = ['Peter Ham, FRE Marcus Miller, POR', 'Kyle Benham, KIT', 'Tory Net, WWQ']
name_list2 = ['Peter Ham, FRE', 'Marcus Miller, POR', 'Kyle Benham, KIT', 'Taylor Ben, KOO']

代码
desired_list = []
pattern = f"\b({'|'.join(name_list1)})\b "
for i in name_list2:
desired_list.extend(re.sub(pattern, "\1:",i).split(':'))

列表是如何返回的

undesired_list = ['Peter', 'Ham, FRE', 'Marcus', 'Miller, POR', 'Kyle', 'Benham, KIT', 'Tory', 'Net, WWQ', 'Taylor', 'Ben, KOO']

如何返回列表:

desired_list = ['Peter Ham, FRE', 'Marcus Miller, POR', 'Kyle Benham, KIT', 'Tory Net, WWQ', 'Taylor Ben, KOO']

因此,得到的desired_list所含的元素应该至少和name_list2所含的元素一样多。

因为你的图案使用了"|"(意味着)。你不需要使用它。没有OR,它可以工作

desired_list = []
pattern = f"\b({' '.join(name_list1)})\b "
for i in name_list2:
desired_list.extend(re.sub(pattern, "\1:",i).split(':'))
desired_list
Out[10]: ['Peter Ham, FRE', 'Marcus Miller, POR', 'Kyle Benham, KIT', 'Taylor Ben, KOO']

编辑

你将得到模式"b(foo | bar)b",它将捕获所有包含"foo""bar"的单词。但是你只需要捕获"foo bar"