我有一个应用程序,使用Rx从串行端口上的设备接收数据。我有一个IObservable<char>
,我把它切成不同的串。但是,设备供应商添加了一些用大括号括起来的调试信息:
<>之前源- a - b - c - {-d-e-b-u-g} -d-e-f——|| | | | | |输出- a - b - c --------------- d-e-f——|之前
interesting stuff {debug stuff} interesting stuff
我需要从我的字符序列中过滤(丢弃,忽略){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---|