我有一个字符串列表,我称之为过滤器。
filter = ["/This/is/an/example", "/Another/example"]
现在我想只抓取另一个列表中的字符串,这些字符串以这两个中的一个开头(或者更多,列表将是动态的)。所以假设我要检查的字符串列表就是这个。
to_check= ["/This/is/an/example/of/what/I/mean", "/Another/example/this/is/", "/This/example", "/Another/freaking/example"]
当我通过过滤器运行时,我会得到一个返回的
列表["/This/is/an/example/of/what/I/mean", "/Another/example/this/is"]
有谁知道python是否有办法做我正在谈论的事情?只从列表中抓取来自另一个列表的字符串的字符串?
答案 0 :(得分:3)
使filter
成为一个元组并使用str.startswith()
,它需要一个字符串或一个字符串元组来测试:
filter = tuple(filter)
[s for s in to_check if s.startswith(filter)]
演示:
>>> filter = ("/This/is/an/example", "/Another/example")
>>> to_check = ["/This/is/an/example/of/what/I/mean", "/Another/example/this/is/", "/This/example", "/Another/freaking/example"]
>>> [s for s in to_check if s.startswith(filter)]
['/This/is/an/example/of/what/I/mean', '/Another/example/this/is/']
注意,当与路径匹配前缀时,通常需要附加尾随路径分隔符,以使/foo/bar
与/foo/bar_and_more/
路径不匹配。
答案 1 :(得分:0)
使用正则表达式。
尝试以下
import re
filter = ["/This/is/an/example", "/Another/example"]
to_check= ["/This/is/an/example/of/what/I/mean", "/Another/example/this/is/", "/This/example", "/Another/freaking/example"]
for item in filter:
for item1 in to_check:
if re.match("^"+item,item1):
print item1
break
<强>输出强>
/This/is/an/example/of/what/I/mean
/Another/example/this/is/