Python脚本根据结尾过滤字符串列表

时间:2013-11-26 08:22:13

标签: python string filter

我不知道任何python,但我需要自定义一个脚本。 在脚本中解析了字符串并将其放入列表中(我猜)。 然后根据它们是否以“http”开头来过滤这些字符串。我想要添加的是基于文件扩展名的过滤器。所有以htmlxml结尾的链接都将被过滤。

这是过滤所有超链接的代码:

links = filter (lambda x:x.startswith("http://") , links) 

我不知道为.endswith(".html) OR .endswith("xml")

之类的东西设置OR运算符的正确语法

我知道这会过滤所有以.html结尾的链接,但我还需要.xml个链接。

links = filter (lambda x:x.startswith("http://") , links) 
links = filter (lambda x:x.endswith(".html") , links) 

提前致谢!!

2 个答案:

答案 0 :(得分:4)

如果你至少有2.5,你可以将一个后缀元组传递给endswith。感谢@hcwhsa指出:

links = filter(lambda x:x.endswith((".html", ".xml")), links)

如果您使用的是早期版本,则可以使用or运算符:

links = filter(lambda x:x.endswith(".html") or x.endswith(".xml"), links) 

如果你不确定它已经小写了,你会想要小写x。

我可能会使用生成器表达式而不是filter执行此操作,当然不会连续调用filter

links = [link for link in links if link.startswith('http://') and link.endswith(('.html', '.xml'))]

答案 1 :(得分:0)

我认为最好用regex检查这个

>>> import re
>>> c = r"^http://.+\.(html|xml)"
>>> re.match(c, 'hello')
>>> re.match(c, 'http://data.com/word.html')
<_sre.SRE_Match object at 0x1d2a100>

答案是

import re
regex = r"^http://.+\.(html|xml)"
links = filter(lambda x: re.match(regex, x), links)