我有两个字符串列表,我想检查一个列表中的单词是否包含另一个列表中的字符串
这是我的意思的一个例子:
l1 = ["heollo", "leetcode"], l2 = ["e", "oo"]
返回值应该是
<块引用>“你好”
从这里开始,因为它始终包含 "oo"
和 "e"
我知道可以使用正则表达式和通配符,但我尝试过这样的事情:
string = "heollo"
pattern = "*o*o*"
match = fnmatch.fnmatch(string, pattern)
print(match)
现在这就是我想要的,但是我如何能够从我的列表中获取值,例如 "oo"
并修改它们以允许在之前、之间或之后的任何事情,如果我有 "jjj"
怎么能我让它变成了 "*j*j*j*"
或者有更好的方法来解决这个问题,谢谢
答案 0 :(得分:1)
这会起作用:
import re
l1 = ["heollo", "leetcode"]
l2 = ["e", "oo"]
patterns = ['.*'.join(list(item)) for item in l2]
# patterns is ['e', 'o.*o']
result = [item for item in l1 if all(
[re.search(pattern, item) is not None for pattern in patterns]
)]
# ['heollo']
我在这里更正了您的正则表达式:您想要 .*
- *
表示匹配 0 个或多个,.
表示匹配任何字符。总之,这意味着匹配任何字符的 0 次或多次出现。如果 pattern
不在 item
中,则 re.search(pattern, item)
返回 None
,因此我们只保留任何搜索都不会返回 None
的项目。>