python - 加快正则表达式以禁止 URL 中的单词列表
问题描述
我正在研究一个正则表达式,旨在禁止在 url 中包含某些单词的本地网站。网站的结构是:http|https://mysite.si,禁止词可能出现在“.si”之前或之后(在路径中)。我这样做是因为我的内容过滤器不太擅长阻止我不希望我的孩子接触到的本地网站。到目前为止,我想出了以下内容:
(?!.*(word1|word2|word3...|wordx))(https|http)://.*[.]si
其中 wordx 表示禁用词。虽然我很高兴以上过滤掉了我希望它过滤掉的内容,但我发现性能太慢(单词列表由 400 个单词组成)并且希望有任何提高性能的建议。
解决方案
https?://
您可以通过首先更改与协议的交替并匹配协议,然后在其后添加负前瞻来使模式性能稍好一些。
为了匹配字符串,如果不能有空格,您可以将 更改.*
为\S*
匹配非空白字符。
如果您可能知道哪些词比其他词出现得更多,则可以在开头添加更频繁的词,例如使量词不贪婪以更快地获得断言结果。
为了防止部分匹配,您可以\b
在模式周围添加单词边界。
根据单词列表,您还可以\b(?:word1|word2|word3)\b
在组周围添加单词边界。
\bhttps?://(?!\S*?(?:word1|word2|word3...|wordx))\S*[.]si\b
推荐阅读
- javascript - 如何使用 sinon 在节点 js 中对 api 请求调用的函数进行存根
- c# - 如何让一个类在参数名称的泛型中传递它自己的类型?
- java - Android imageview id 未解析,
- javascript - 如何根据道具reactjs渲染部分渲染
- javascript - 如何在 Asp.Net MVC 中将正则表达式分解为多个正则表达式?
- javascript - 我如何在 Elm 的本地存储中保存应用程序状态
- ruby - 茧形成的嵌套无法保存
- python - 带有自定义训练循环的 Tensorboard Graph 不包括我的模型
- python-3.x - 如何从文本中获取信息并使用python将其保存在变量中
- python - 与 AWS MySQL DB 的 Python 连接-“连接到 AWS 时出错:__init__() 为参数 'user' 获得了多个值”