正则表达式数值数据处理:匹配一系列大于X的数字

Mu *_*ind 8 python regex

说我有这样的数据:

number_stream = [0,0,0,7,8,0,0,2,5,6,10,11,10,13,5,0,1,0,...]
Run Code Online (Sandbox Code Playgroud)

我想处理它寻找符合某种模式的"颠簸".

想象一下,我有自己的自定义正则表达式语言来处理数字,其中[[> = 5]]表示任何数字> = 5.我想捕获这种情况:

([[ >=5 ]]{3,})[[ <3 ]]{2,}
Run Code Online (Sandbox Code Playgroud)

换句话说,我想开始捕捉任何时候我向前看并连续看到3个或更多值> = 5,并且在我向前看并且看到2 +值<3时停止捕获.所以我的输出应该是:

>>> stream_processor.process(number_stream)
[[5,6,10,11,10,13,5],...]
Run Code Online (Sandbox Code Playgroud)

注意,第一个7,8,...被忽略,因为它不是足够长的时间,并且捕获结束之前0,1,0....

我还想要一个stream_processor对象,我可以在后续process调用中逐步传递更多数据,并在完成后返回捕获的块.

我已经写了一些代码来做这件事,但它很丑陋且状态机器,我不禁觉得我错过了一些明显的东西.干净利落的想法吗?

Ale*_*lli 3

状态机(富含相当多的附加功能,因为正则表达式可以比 FSM 匹配更广泛的语言)是实现正则表达式引擎的典型方法,所以为什么不应该出现类似的方法来寻找您想要的“良好实现”类似正则表达式的”构造?

事实上,我会考虑从实际 RE 引擎的代码开始(PyPy 源中有一个 Python 编码的引擎,其 Mercurial 树位于此处,仅更改“基元”(您不需要例如\w\s,但您需要<5>3等)并保留*+等的大多数语法和实现。顺便说一句,这样的项目非常值得开源。