gpt4 book ai didi

python - 正则表达式数字数据处理: match a series of numbers greater than X

转载 作者:太空狗 更新时间:2023-10-29 21:07:50 28 4
gpt4 key购买 nike

假设我有这样的数据:

number_stream = [0,0,0,7,8,0,0,2,5,6,10,11,10,13,5,0,1,0,...]

我想处理它以寻找符合特定模式的“颠簸”。

假设我有自己的自定义正则表达式语言来处理数字,其中 [[ >=5 ]] 代表任何数字 >= 5。我想捕捉这种情况:

([[ >=5 ]]{3,})[[ <3 ]]{2,}

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

>>> stream_processor.process(number_stream)
[[5,6,10,11,10,13,5],...]

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

我还想要一个 stream_processor 对象,我可以在后续的 process 调用中递增地传递更多数据,并在它们完成时返回捕获的 block 。

我已经编写了一些代码来执行此操作,但它很丑陋并且是状态机,我不禁觉得我错过了一些明显的东西。有什么想法可以干净利落地做到这一点吗?

最佳答案

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

事实上,我会考虑从实际 RE 引擎的代码开始(在 PyPy 源代码中有一个 Python 编码的代码,它的 mercurial 树是 here ),只改变“基元”(你不不需要例如 \w\s ,但您需要 <5>3 等)并保留 * 的大部分语法和实现, + , 等等。顺便说一句,这样的项目非常值得开源。

关于python - 正则表达式数字数据处理: match a series of numbers greater than X,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2901101/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com