需要正则表达式解析器的帮助-C#
我正在编写一个程序,从串口读取二进制数据流,并需要解析和格式化输入 数据是不断读取的,需要显示为完整的字符串。每个字符串的“开始代码”为3字节,“结束代码”为3字节。我需要编写一个解析器,该解析器将根据开始和结束代码查找数据——我假设正则表达式解析器就是实现这一点的方法 在过去的一两天里,我读了很多正则表达式,但它只是没有点击。帮忙 开始代码:0x16<0x02(不会用空格分隔) 结束代码:0x03>0x17(不会用空格分隔)需要正则表达式解析器的帮助-C#,c#,regex,parsing,C#,Regex,Parsing,我正在编写一个程序,从串口读取二进制数据流,并需要解析和格式化输入 数据是不断读取的,需要显示为完整的字符串。每个字符串的“开始代码”为3字节,“结束代码”为3字节。我需要编写一个解析器,该解析器将根据开始和结束代码查找数据——我假设正则表达式解析器就是实现这一点的方法 在过去的一两天里,我读了很多正则表达式,但它只是没有点击。帮忙 开始代码:0x160x17(不会用空格分隔) 有人能给出能找到这些值的正则表达式吗?有没有一种方法可以在c#中找到它们而不从字符串中删除它们(也就是说,在c#中不考
有人能给出能找到这些值的正则表达式吗?有没有一种方法可以在c#中找到它们而不从字符串中删除它们(也就是说,在c#中不考虑它们的普通分隔符,例如string.Split())?如果匹配几个字节值非常简单,您可以考虑编写一个简单的有限状态机来匹配开始和结束。更容易测试并以代码的形式表示。我认为在这种情况下,正则表达式是过分的。我会在数据字节到达时缓冲它们,在接收到每个字节后,检查是否以您的结束代码结束。大致如下(动态编写,不只是粘贴和编译):
var buffer=新列表();
var endCode=新字节[]{3',>',0x17};
//在循环中:
字节?received=ReceiveByte()//如果没有可用的新字节,则返回null
if(字节.HasValue){
buffer.Add(已接收);
if(buffer.Skip(buffer.Count()-endCode.Length).Take(endCode.Length).SequenceEqual(endCode){
//在缓冲区中处理接收到的数据
buffer.Clear();
}
}
.NET
中的A处理Unicode字符串。处理二进制数据字节时,Regex
将需要某种形式的Unicode解码。作为字节数组保存的数据不适合Regex
使用。请查找有意义的(用于您的数据),或者忘记regexp引擎。经过一些修改,这个想法非常有效。非常感谢。
var buffer=new List<byte>();
var endCode=new byte[] {3, '>', 0x17};
// In a loop:
byte? received=ReceiveByte(); //Return null if no new byte available
if(byte.HasValue) {
buffer.Add(received);
if(buffer.Skip(buffer.Count()-endCode.Length).Take(endCode.Length).SequenceEqual(endCode){
//Process the received data in buffer
buffer.Clear();
}
}