检查字符串的开头是否与字符串列表中的内容匹配(python)

时间:2014-04-03 17:30:39

标签: python string list filtering

我有一个字符串列表,我称之为过滤器。

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是否有办法做我正在谈论的事情?只从列表中抓取来自另一个列表的字符串的字符串?

2 个答案:

答案 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/