从备选列表中查找匹配的正则表达式

时间:2014-01-21 15:37:10

标签: python regex mongodb

我有一个正则表达式列表和一个字符串。我想知道哪个正则表达式(可能不止一个)与字符串匹配,如果有的话。简单的解决方案是逐个尝试正则表达式,但这部分性能至关重要......是否有更快的解决方案?也许是以某种方式在单个状态机中组合正则表达式?

原因:正则表达式是用户提供的与传入字符串匹配的过滤器。当带有字符串的消息到达时,系统需要执行其他用户指定的操作。

最多可提供10000个正则表达式。正则表达式是用户提供的,如果需要可以稍微简化(尽管应该允许.* :))。正则表达式列表保存在MongoDB中,但如果需要,我也可以预取它们并在Python中执行搜索。

类似的问题:

  • 类似于this question ,但约束条件不同:模糊匹配不够,正则表达式的数量要低得多(高达10k)
  • 类似于this question ,但我可以在必要时预处理正则表达式
  • 类似于this question ,但我需要找到所有匹配的正则表达式

我将不胜感激。

1 个答案:

答案 0 :(得分:0)

首先,如果你有> 10K正则表达式你绝对应该预取并保存它们(使用re.compile)在内存中。作为第二步,我建议考虑并行性。由于GIL,Python中的线程不强。因此,请改用多个流程。第三,我会考虑服务器数量的可扩展性,使用ZeroMQ(或其他MQ)进行通信。

作为一项有趣的科学任务,您可以尝试构建正则表达式解析器,它构建类似正则表达式的树:

A
|-B
|-c
  |-D
  |-E

因此,如果正则表达式A匹配字符串,那么B,C,D,E也匹配它。因此,您将能够减少支票数量。恕我直言,这项任务将耗费大量时间。使用一堆服务器会更便宜,更快。