我有一个正则表达式列表和一个字符串。我想知道哪个正则表达式(可能不止一个)与字符串匹配,如果有的话。简单的解决方案是逐个尝试正则表达式,但这部分性能至关重要......是否有更快的解决方案?也许是以某种方式在单个状态机中组合正则表达式?
原因:正则表达式是用户提供的与传入字符串匹配的过滤器。当带有字符串的消息到达时,系统需要执行其他用户指定的操作。
最多可提供10000个正则表达式。正则表达式是用户提供的,如果需要可以稍微简化(尽管应该允许.*
:))。正则表达式列表保存在MongoDB中,但如果需要,我也可以预取它们并在Python中执行搜索。
类似的问题:
我将不胜感激。
答案 0 :(得分:0)
首先,如果你有> 10K正则表达式你绝对应该预取并保存它们(使用re.compile)在内存中。作为第二步,我建议考虑并行性。由于GIL,Python中的线程不强。因此,请改用多个流程。第三,我会考虑服务器数量的可扩展性,使用ZeroMQ(或其他MQ)进行通信。
作为一项有趣的科学任务,您可以尝试构建正则表达式解析器,它构建类似正则表达式的树:
A
|-B
|-c
|-D
|-E
因此,如果正则表达式A匹配字符串,那么B,C,D,E也匹配它。因此,您将能够减少支票数量。恕我直言,这项任务将耗费大量时间。使用一堆服务器会更便宜,更快。