【问题标题】:How to search multiple words using lambda如何使用 lambda 搜索多个单词
【发布时间】:2015-01-02 09:46:12
【问题描述】:

我正在搜索 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

【问题讨论】:

  • 我应该提供更多信息吗?
  • 你的代码lambda吗?
  • @PM2Ring 它必须在函数内部,请参阅stackoverflow.com/questions/27730041/…
  • 在这种情况下,Sandy 应该只使用常规函数,而不是尝试将代码填充到 lambda 中。恕我直言。

标签: python html python-3.x lambda


【解决方案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

【讨论】:

    【解决方案2】:

    您可以使用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 在这种情况下意味着“单词边界”

    【讨论】:

    • 应该是文本内的updown的倒数。
    • @alecxe: re 模块已经在内部缓存了已编译的表达式,除非证明效率低下,否则我不会丑化代码。
    • 是的,确实如此,好吧,过早的优化是邪恶的。
    猜你喜欢
    • 2020-12-29
    • 2013-01-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-05-01
    • 2021-07-25
    • 1970-01-01
    相关资源
    最近更新 更多