我有两个列表。我想使用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"