【问题标题】:Speed up regexp to ban wordlist from urls加快正则表达式以禁止 URL 中的单词列表
【发布时间】:2021-12-16 14:39:38
【问题描述】:

我正在研究一个正则表达式,旨在禁止在 url 中包含某些单词的本地网站。网站的结构是: http|https://mysite.si 可能出现在“.si”之前或之后(在路径中)的禁用词。我这样做是因为我的内容过滤器不太擅长阻止我不希望我的孩子接触到的本地网站。到目前为止,我想出了以下几点:

(?!.*(word1|word2|word3...|wordx))(https|http)://.*[.]si

其中 wordx 表示被禁止的词。虽然我很高兴以上过滤掉了我希望它过滤掉的内容,但我发现性能太慢(单词列表由 400 个单词组成)并且希望有任何提高性能的建议。

【问题讨论】:

  • 这是什么语言?
  • 这是蟒蛇。编辑了问题以添加该详细信息。正则表达式被输入到接受 python 正则表达式的内容过滤器中。

标签: python regex regex-negation


【解决方案1】:

您可以通过将交替更改为 https?:// 并首先匹配协议,然后在其后添加负前瞻来使模式性能稍好。

为了匹配字符串,如果不能有空格,您可以将.* 更改为\S* 以匹配非空白字符。

如果您可能知道哪些词比其他词出现得更多,则可以在开头添加更频繁的词,例如使量词不贪婪以更快地获得断言结果。

为防止部分匹配,您可以在模式周围添加字边界\b

根据单词列表,您还可以在组周围添加单词边界\b(?:word1|word2|word3)\b

\bhttps?://(?!\S*?(?:word1|word2|word3...|wordx))\S*[.]si\b

【讨论】:

    猜你喜欢
    • 2020-04-06
    • 2022-12-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-11-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多