如何使用lambda搜索多个单词

时间:2015-01-02 09:46:13

标签: python html python-3.x lambda

我正在搜索HTML源代码中包含"up""down"的行。只有一个单词代码正在运行。但是如果我想搜索包含多个单词的行,那么如何在Python 3.4.2中进行搜索?

links = lambda tag: getattr(tag, 'name', None) == 'a' and 'up|down' in tag.get_text().lower() and 'href' in tag.attrs

2 个答案:

答案 0 :(得分:1)

您始终可以使用常规功能而不是简短的lambda表单。

tag的文字中定义要检查的字词列表,然后使用any() + in检查文字中是否存在字词:

stop_words = ['up', 'down']
def filter_links(tag):
    if getattr(tag, 'name', None) == 'a' and 'href' in tag.attrs:
        text = tag.get_text().lower()
        return any(item in text for item in stop_words) 
    return False

答案 1 :(得分:0)

您可以使用re.search查找单词列表

lambda tag: (getattr(tag, 'name', None) == 'a' and
             re.search("up|down", tag.get_text().lower()) and
             'href' in tag.attrs)

请注意,例如"downsize"在这种情况下也会匹配。如果您希望单独的单词updown出现,则表达式为:

re.search("\\b(up|down)\\b", ...)

因为\b在这种情况下意味着“单词边界”