【问题标题】:Using Reactive Extensions, how can I ignore a sequence of characters based on delimiters?使用 Reactive Extensions,如何忽略基于分隔符的字符序列?
【发布时间】:2015-08-10 13:02:29
【问题描述】:

我有一个应用程序使用 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}?。有没有一种简单的方法可以做到这一点? “当你看到这个角色时,忽略元素,直到你看到这个另一个角色”。

我查看了直到,但这会终止序列,我不希望这种情况发生......

【问题讨论】:

    标签: system.reactive reactive-programming rx.net


    【解决方案1】:

    假设没有嵌套或不平衡的括号,这应该可以满足您的需求。

    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---|
    

    【讨论】:

    • 好的,谢谢,我想我明白你在做什么了。所以我认为这基本上将第一个大括号之后的所有内容都转换为左大括号字符,直到右大括号;然后过滤掉大括号。我会试试看的。
    猜你喜欢
    • 2022-01-22
    • 1970-01-01
    • 2020-12-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-03-25
    相关资源
    最近更新 更多