返回不匹配的子字符串



我想比较地址列表(B)和包含地址(A)的人员列表。代码重写这些值,以便打印包含不相关信息的A。

我如何修改它,以便它打印匹配的B值?

或者,更好的是:是否有可能得到任何A中不包含的B值的输出?

A = ["<hi>", "12you","good"]
B = ["hi", "you", "good", "luck"]
C = [x for x in A if any(b in x for b in B)]
print(C)

期望输出:'hi', 'you', 'good'更多期望输出:'luck'

我将通过正则表达式搜索和提取组来解决第一个任务。第二种方法则简化为从可用地址列表中减去找到的地址。

>>> addresses = re.compile("|".join(f"({b})" for b in B))
>>> addresses.pattern
'(hi)|(you)|(good)|(luck)'
>>> [m.group(0) for a in A if (m := addresses.search(a))]
['hi', 'you', 'good']
>>> set(B).difference([m.group(0) for a in A if (m := addresses.search(a))])
{'luck'}