使用正则表达式的组的可变数目

本文关键字:正则表达式 | 更新日期: 2023-09-27 18:02:34

我有一个需要解析的数据流。流逐行发送,格式为:

ID: XXX  Data: XX XX XX XX XX XX XX XX

其中X's为十六进制字符,即:

ID: 1F9  Data: AC 12 53 8F 14 11 FF 00 -> For example

问题在于并不总是有8个数据字节,所以这些传输中的任何一种都是可能的:

ID: XXX  Data: XX
ID: XXX  Data: XX XX
ID: XXX  Data: XX XX XX 
ID: XXX  Data: XX XX XX XX 
ID: XXX  Data: XX XX XX XX XX 
ID: XXX  Data: XX XX XX XX XX XX 
ID: XXX  Data: XX XX XX XX XX XX XX 
ID: XXX  Data: XX XX XX XX XX XX XX XX

我想写一个正则表达式,它可以解析出ID和每次传输的可用数据字节。然后我需要将字节存储在数组中以分配给dataGridView。

如何编写模式来完成此操作?是否有一个更好的方法来分配值的行在一个dataGridView比分配给一个数组?执行时间需要优化

谢谢!

使用正则表达式的组的可变数目

您可以使用下面的代码。它首先分割输入字符串,然后将值选择到适当的变量中:

注意:您可以直接使用split变量,您的ID在索引1中,值从2开始。忽略第一个元素,因为它包含一个空字符串。

String input = "ID: 1F9  Data: AC 12 53 8F 14 11 FF 00";
String pattern = @"ID:'s|'s'sData:'s|'s";
string[] split = Regex.Split(input, pattern);
string id = split[1]; // the first elements contains "" so ignore it
string[] values = new string[split.Length - 2];
for (int i = 2; i < split.Length; i++)
    values[i - 2] = split[i];