使用响应式扩展时,如何忽略基于分隔符的字符序列?



我有一个应用程序,使用Rx从串行端口上的设备接收数据。我有一个IObservable<char>,我把它切成不同的串。但是,设备供应商添加了一些用大括号括起来的调试信息:

interesting stuff {debug stuff} interesting stuff

<>之前源- a - b - c - {-d-e-b-u-g} -d-e-f——|| | | | | |输出- a - b - c --------------- d-e-f——|之前

我需要从我的字符序列中过滤(丢弃,忽略){debug stuff}。有什么简单的方法吗?"当你看到这个字符时,忽略元素,直到你看到另一个字符"。

我看了Until,但是这会终止序列,我不希望发生这种情况。

如果没有嵌套或不平衡的括号,这应该是您想要的。

source
    .Scan((prev, c) =>
    {
        if (prev == '{')
            return c == '}' ? c : '{';
        else
            return c;
    })
    .Where(c => c != '{' && c != '}')

它将{之后的所有内容转换为{,直到},然后过滤掉所有大括号。图中的输出是:

source ---a-b-c-{-d-e-b-u-g-}-d-e-f---|
scan   ---a-b-c-{-{-{-{-{-{-}-d-e-f---|
          | | |               | | |
where  ---a-b-c---------------d-e-f---|

最新更新