【问题标题】:How to find regexp patterns in a Python list?如何在 Python 列表中查找正则表达式模式?
【发布时间】:2014-02-11 22:03:34
【问题描述】:

我有一个坏词列表。假设它是:

BAD_WORDS = ['bw1', 'bw2',...] 

现在我想知道在如下代码中检查长字符串(又名 django 请求帖子)的最有效方法是什么:

if re.search(comment.body) in BAD_WORDS:        
        dosomething;

【问题讨论】:

    标签: python regex list


    【解决方案1】:

    最好的办法是对所有的坏词使用一种表达方式:

    import re
    bad_words = ['bw1', 'bw2', ... ]
    
    my_expression = '|'.join(re.escape(word) for word in bad_words)
    if re.search(my_expression, comment.body):
        do_something()
    

    【讨论】:

    • 很好的答案,但是,我会将flags=re.IGNORECASE 传递给 re.search 以解决不区分大小写的问题。
    • @Rishi 我想说这必须由实施者决定,而不是回答者建议。可能ass 是受审查的作品,但ASS 是情感智人协会等。
    • @Rishi 我应该如何添加标志?
    • @supermario re.search(my_expression, comment.body, flags=re.IGNORECASE)
    【解决方案2】:

    您可以为此使用any

    要仅匹配子字符串而不是精确单词,您可以使用in 运算符:

    if any(word in comment.body for word in BAD_WORDS):
        #do something
    

    要匹配确切的单词,请使用regex:

    import re
    if any(re.search(r'\b{}\b'.format(re.escape(word)), comment.body)
                                                                for word in BAD_WORDS):
        #do something
    

    【讨论】:

      猜你喜欢
      • 2015-06-24
      • 1970-01-01
      • 1970-01-01
      • 2016-03-25
      • 2021-02-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多