我想找出一段字符串中 07 81 08开头后面的8个字节的字符串,但是我使用程序来获取,每次都只能获取9个,是不是我的正则表达式不对,还请各位看看。用正则工具看字符串确实是10段 而且我也数过了 是10段。以下是程序代码以及我用第三方正则表达式工具查看的结果。Matches.count 一直等于9.程序可以直接运行调试查看。
static void Main(string[] args) { string str = @"FF FF FF FF CA CB CC CD 02 FF 08 00 00 07 68 B3 A4 0F A0 07 82 08 00 02 4C E5 00 01 00 00 07 80 08 00 00 01 F4 7F 00 45 12 07 80 08 54 73 6C 2E 10 07 C7 3B 07 81 08 7F FF 4B 00 00 00 00 00 07 81 08 00 00 00 00 00 00 02 00 07 81 08 7F FF 4B 01 00 00 00 01 07 81 08 00 00 00 01 00 00 02 01 07 81 08 76 39 44 C2 00 00 00 02 07 81 08 09 60 00 12 00 00 02 02 07 81 08 7F FF 4B 03 00 00 00 03 07 81 08 00 00 00 03 00 00 02 03 07 81 08 7F FF 4B 04 00 00 00 04 07 81 08 00 00 00 04 00 00 02 04 07 80 08 00 00 01 F4 7F 00 45 12 07 82 08 00 02 4C E5 00 01 00 00 07 83 05 FF FF 00 00 0E 07 83 06 00 00 00 00 00 00 07 83 04 00 00 00 01 1F EA EB EC ED"; //使用正则表达式 找到指定对应数据格式的字符串。 Regex regex = new Regex("07 81 08.{24}"); MatchCollection Matches = regex.Matches(str, 0); Console.WriteLine(Matches.Count); }
—-
估计是最后一个匹配,后面没有24个字符
—-
你这段文字,就是9个,自己好好数数
—-
是换行的问题 ,第一行最后一组 07 81 08 开头的字符串没被匹配
—-
前辈 这个字符串一定是10组 有一组好像换行了。如最后一楼说的那样
—-
这问题该如何解决- –
—-
public static void Find_07_81_08_Substring() { string str = @"FF FF FF FF CA CB CC CD 02 FF 08 00 00 07 68 B3 A4 0F A0 07 82 08 00 02 4C E5 00 01 00 00 07 80 08 00 00 01 F4 7F 00 45 12 07 80 08 54 73 6C 2E 10 07 C7 3B 07 81 08 7F FF 4B 00 00 00 00 00 07 81 08 00 00 00 00 00 00 02 00 07 81 08 7F FF 4B 01 00 00 00 01 07 81 08 00 00 00 01 00 00 02 01 07 81 08 76 39 44 C2 00 00 00 02 07 81 08 09 60 00 12 00 00 02 02 07 81 08 7F FF 4B 03 00 00 00 03 07 81 08 00 00 00 03 00 00 02 03 07 81 08 7F FF 4B 04 00 00 00 04 07 81 08 00 00 00 04 00 00 02 04 07 80 08 00 00 01 F4 7F 00 45 12 07 82 08 00 02 4C E5 00 01 00 00 07 83 05 FF FF 00 00 0E 07 83 06 00 00 00 00 00 00 07 83 04 00 00 00 01 1F EA EB EC ED"; Regex regex = new Regex(@"07 81 08( [A-Z0-9][A-Z0-9](?=\s*)){8}", RegexOptions.IgnoreCase); foreach (Match match in regex.Matches(str)) { Console.WriteLine(match.Value); } }
—-
谢谢解答,但是结果还是没有找出完整的10组数据,这个问题快奔溃了,查了一下,大概就是有一些数据从TCP/IP过来的时候,完整的数据包,有一些07 81 08 换行了。继续等待高手解答这个问题,感觉正则没法处理。
—-
public static void Find_07_81_08_Substring() { string str = @"FF FF FF FF CA CB CC CD 02 FF 08 00 00 07 68 B3 A4 0F A0 07 82 08 00 02 4C E5 00 01 00 00 07 80 08 00 00 01 F4 7F 00 45 12 07 80 08 54 73 6C 2E 10 07 C7 3B 07 81 08 7F FF 4B 00 00 00 00 00 07 81 08 00 00 00 00 00 00 02 00 07 81 08 7F FF 4B 01 00 00 00 01 07 81 08 00 00 00 01 00 00 02 01 07 81 08 76 39 44 C2 00 00 00 02 07 81 08 09 60 00 12 00 00 02 02 07 81 08 7F FF 4B 03 00 00 00 03 07 81 08 00 00 00 03 00 00 02 03 07 81 08 7F FF 4B 04 00 00 00 04 07 81 08 00 00 00 04 00 00 02 04 07 80 08 00 00 01 F4 7F 00 45 12 07 82 08 00 02 4C E5 00 01 00 00 07 83 05 FF FF 00 00 0E 07 83 06 00 00 00 00 00 00 07 83 04 00 00 00 01 1F EA EB EC ED"; Regex regex = new Regex(@"(?<header>07 81 08 )((?<repeat>[A-Z0-9][A-Z0-9])(?:[^A-Z0-9]*)){8}", RegexOptions.Multiline); foreach (Match match in regex.Matches(str)) { Console.WriteLine(match.Groups["header"].Value + String.Join(" ", match.Groups["repeat"].Captures.Cast<Capture>().Select(c => c.Value))); } Console.WriteLine(Regex.Matches(str, @"^", RegexOptions.Multiline).Count); }
—-
Console.WriteLine(Regex.Matches(str, @"^", RegexOptions.Multiline).Count);
这行去掉
—-
你这个做法是给07 81 08开头的数据包加了一个标识?然后再做处理
—- 40分
没有啊,元数据还是你的数组啊。建议你去看一下 MSDN,正则的基本语法你应该知道一下,结贴吧。
—-
Console.WriteLine(Regex.Matches(str, @"^", RegexOptions.Multiline).Count);这行去掉
你这个做法是给07 81 08开头的数据包加了一个标识?然后再做处理
没有啊,元数据还是你的数组啊。建议你去看一下 MSDN,正则的基本语法你应该知道一下,结贴吧。
其实如果是以下这段字符串 就有问题了 哎
string str = @"FF FF FF FF CA CB CC CD 02 FF 08 00 00 0F 1C FA AE 0F A0 05 00 08 00 1E F3 DD 00 00 00 00 05 01 08 00 00 9E 54 00 32 01 08 05 10 08 00 2A 00 3B A8 02 22 0B 05 11 08 04 2A 00 3B A8 02 28 BC 05 12 08 08 AE 00 37 57 F0 2A 76 05 13 08 0C 5A 00 37 57 F0 24 0C 05 14 08 10 AE 00 33 07 DE 25 AB 05 15 08 14 5A 00 33 07 DE 2C 7B 05 16 08 18 5A 00 2E A7 CC 28 13 05 17 08 1C AE 00 2E A7 CC 21 B9 07 82 08 00 02 4C E5 00 04 00 00 07 80 08 00 00 01 F4 7F 00 45 42 07 80 08 54 74 4E 72 10 0F 74 A5 07 81 08 7F FF 4B 00 00 00 00 00 07 81 08 00 00 00 00 00 00 02 00 07 81 08 7F FF 4B 01 00 00 00 01 07 81 08 00 00 00 01 00 00 02 01 07 81 08 76 39 44 C2 00 00 00 02 07 81 08 04 AC 00 12 00 00 02 02 07 81 08 7F FF 4B 03 00 00 00 03 07 81 08 00 00 00 03 00 00 02 03 07 81 08 7F FF 4B 04 00 00 00 04 07 81 08 00 00 00 04 00 00 02 04 07 82 08 00 02 4C E5 00 04 00 00 07 83 05 FF FF 00 09 0E 07 83 06 08 00 01 00 00 00 07 83 04 00 00 00 01 38 EA EB EC ED FF FF FF FF CA CB CC CD 02 FF 08 00 00 0F 1D 13 19 07 A0 05 00 08 00 1E F4 0F 00 00 00 00 05 01 08 00 00 9E 55 00 32 01 08 05 10 08 00 2A 00 3B A8 02 22 05 05 11 08 04 2A 00 3B A8 02 28 B7 05 12 08 08 AE 00 37 57 F0 2A 6B 05 13 08 0C 5A 00 37 57 F0 24 02 05 14 08 10 AE 00 33 07 DE 25 9B 05 15 08 14 5A 00 33 07 DE 2C 6A 05 16 08 18 5A 00 2E A7 CC 27 FE 05 17 08 1C AE 00 2E A7 CC 21 A3 07 81 08 7F FF 4B 00 00 00 10 05 07 81 08 00 00 00 00 00 00 12 05 07 81 08 7F FF 4B 01 00 00 10 06 07 81 08 00 00 00 01 00 00 12 06 07 81 08 7F FF 4B 02 00 00 10 07 07 81 08 00 00 00 02 00 00 12 07 07 81 08 7F FF 4B 03 00 00 10 08 07 81 08 00 00 00 03 00 00 12 08 07 81 08 7F FF 4B 04 00 00 10 09 07 81 08 01 8C 00 04 00 00 12 09 07 82 08 00 02 4C E5 00 04 00 00 07 83 05 FF FF 00 09 0E 07 83 06 08 00 01 00 00 00 07 83 04 00 00 00 01 3C EA EB EC ED FF FF FF FF CA CB CC CD 02 FF 08 00 00 0F 1D 2B 84 0F A0 05 00 08 00 1E F4 41 00 00 00 00 05 01 08 00 00 9E 56 00 32 01 08 05 10 08 00 2A 00 3B A8 02 22 00 05 11 08 04 2A 00 3B A8 02 28 B2 05 12 08 08 AE 00 37 57 F0 2A 61 05 13 08 0C 5A 00 37 57 F0 23 F7 05 14 08 10 AE 00 33 07 DE 25 8B 05 15 08 14 5A 00 33 07 DE 2C 5A 05 16 08 18 5A 00 2E A7 CC 27 E8 05 17 08 1C AE 00 2E A7 CC 21 8E 07 81 08 7F FF 4B 00 00 00 20 0A 07 81 08 00 00 00 00 00 00 22 0A 07 81 08 7F FF 4B 01 00 00 20 0B 07 81 08 00 00 00 01 00 00 22 0B 07 81 08 7F FF 4B 02 00 00 20 0C 07 81 08 00 00 00 02 00 00 22 0C 07 81 08 62 B3 38 43 00 00 20 0D 07 81 08 06 3C 00 13 00 00 22 0D 07 81 08 7F FF 4B 04 00 00 20 0E 07 81 08 00 00 00 04 00 00 22 0E 07 82 08 00 02 4C E5 00 04 00 00 07 83 05 FF FF 00 09 0E 07 83 06 00 00 01 00 00 00 07 83 04 00 00 00 01 F2 EA EB EC ED FF FF FF FF CA CB CC CD 02 FF 08 00 00 0F 1D 43 EF 07 A0 05 00 08 00 1E F4 73 00 00 00 00 05 01 08 00 00 9E 57 00 32 01 08 05 10 08 00 2A 00 3B A8 02 21 FA 05 11 08 04 2A 00 3B A8 02 28 AC 05 12 08 08 AE 00 37 57 F0 2A 56 05 13 08 0C 5A 00 37 57 F0 23 EC 05 14 08 10 AE 00 33 07 DE 25 7A 05 15 08 14 5A 00 33 07 DE 2C 4A 05 16 08 18 5A 00 2E A7 CC 27 D2 05 17 08 1C AE 00 2E A7 CC 21 78 07 81 08 7F FF 4B 00 00 47 B0 0F 07 81 08 00 00 00 00 00 45 32 0F 07 81 08 7F FF 4B 01 00 00 30 10 07 81 08 00 00 00 01 00 00 32 10 07 81 08 7F FF 4B 02 00 00 30 11 07 81 08 00 00 00 02 00 00 32 11 07 81 08 58 EF 32 03 00 00 30 12 07 81 08 04 AC 00 13 00 00 32 12 07 81 08 58 EF 32 04 00 00 30 13 07 81 08 07 CC 00 14 00 00 32 13 07 80 08 00 00 01 F4 7F 00 45 42 07 82 08 00 02 4C E5 00 04 00 00 07 83 05 FF FF 00 01 0E 07 83 06 00 00 01 00 00 00 07 83 04 00 00 00 01 8F EA EB EC ED";
—-
Console.WriteLine(Regex.Matches(str, @"^", RegexOptions.Multiline).Count);这行去掉
你这个做法是给07 81 08开头的数据包加了一个标识?然后再做处理
没有啊,元数据还是你的数组啊。建议你去看一下 MSDN,正则的基本语法你应该知道一下,结贴吧。
其实如果是以下这段字符串 就有问题了 哎
string str = @"FF FF FF FF CA CB CC CD 02 FF 08 00 00 0F 1C FA AE 0F A0 05 00 08 00 1E F3 DD 00 00 00 00 05 01 08 00 00 9E 54 00 32 01 08 05 10 08 00 2A 00 3B A8 02 22 0B 05 11 08 04 2A 00 3B A8 02 28 BC 05 12 08 08 AE 00 37 57 F0 2A 76 05 13 08 0C 5A 00 37 57 F0 24 0C 05 14 08 10 AE 00 33 07 DE 25 AB 05 15 08 14 5A 00 33 07 DE 2C 7B 05 16 08 18 5A 00 2E A7 CC 28 13 05 17 08 1C AE 00 2E A7 CC 21 B9 07 82 08 00 02 4C E5 00 04 00 00 07 80 08 00 00 01 F4 7F 00 45 42 07 80 08 54 74 4E 72 10 0F 74 A5 07 81 08 7F FF 4B 00 00 00 00 00 07 81 08 00 00 00 00 00 00 02 00 07 81 08 7F FF 4B 01 00 00 00 01 07 81 08 00 00 00 01 00 00 02 01 07 81 08 76 39 44 C2 00 00 00 02 07 81 08 04 AC 00 12 00 00 02 02 07 81 08 7F FF 4B 03 00 00 00 03 07 81 08 00 00 00 03 00 00 02 03 07 81 08 7F FF 4B 04 00 00 00 04 07 81 08 00 00 00 04 00 00 02 04 07 82 08 00 02 4C E5 00 04 00 00 07 83 05 FF FF 00 09 0E 07 83 06 08 00 01 00 00 00 07 83 04 00 00 00 01 38 EA EB EC ED FF FF FF FF CA CB CC CD 02 FF 08 00 00 0F 1D 13 19 07 A0 05 00 08 00 1E F4 0F 00 00 00 00 05 01 08 00 00 9E 55 00 32 01 08 05 10 08 00 2A 00 3B A8 02 22 05 05 11 08 04 2A 00 3B A8 02 28 B7 05 12 08 08 AE 00 37 57 F0 2A 6B 05 13 08 0C 5A 00 37 57 F0 24 02 05 14 08 10 AE 00 33 07 DE 25 9B 05 15 08 14 5A 00 33 07 DE 2C 6A 05 16 08 18 5A 00 2E A7 CC 27 FE 05 17 08 1C AE 00 2E A7 CC 21 A3 07 81 08 7F FF 4B 00 00 00 10 05 07 81 08 00 00 00 00 00 00 12 05 07 81 08 7F FF 4B 01 00 00 10 06 07 81 08 00 00 00 01 00 00 12 06 07 81 08 7F FF 4B 02 00 00 10 07 07 81 08 00 00 00 02 00 00 12 07 07 81 08 7F FF 4B 03 00 00 10 08 07 81 08 00 00 00 03 00 00 12 08 07 81 08 7F FF 4B 04 00 00 10 09 07 81 08 01 8C 00 04 00 00 12 09 07 82 08 00 02 4C E5 00 04 00 00 07 83 05 FF FF 00 09 0E 07 83 06 08 00 01 00 00 00 07 83 04 00 00 00 01 3C EA EB EC ED FF FF FF FF CA CB CC CD 02 FF 08 00 00 0F 1D 2B 84 0F A0 05 00 08 00 1E F4 41 00 00 00 00 05 01 08 00 00 9E 56 00 32 01 08 05 10 08 00 2A 00 3B A8 02 22 00 05 11 08 04 2A 00 3B A8 02 28 B2 05 12 08 08 AE 00 37 57 F0 2A 61 05 13 08 0C 5A 00 37 57 F0 23 F7 05 14 08 10 AE 00 33 07 DE 25 8B 05 15 08 14 5A 00 33 07 DE 2C 5A 05 16 08 18 5A 00 2E A7 CC 27 E8 05 17 08 1C AE 00 2E A7 CC 21 8E 07 81 08 7F FF 4B 00 00 00 20 0A 07 81 08 00 00 00 00 00 00 22 0A 07 81 08 7F FF 4B 01 00 00 20 0B 07 81 08 00 00 00 01 00 00 22 0B 07 81 08 7F FF 4B 02 00 00 20 0C 07 81 08 00 00 00 02 00 00 22 0C 07 81 08 62 B3 38 43 00 00 20 0D 07 81 08 06 3C 00 13 00 00 22 0D 07 81 08 7F FF 4B 04 00 00 20 0E 07 81 08 00 00 00 04 00 00 22 0E 07 82 08 00 02 4C E5 00 04 00 00 07 83 05 FF FF 00 09 0E 07 83 06 00 00 01 00 00 00 07 83 04 00 00 00 01 F2 EA EB EC ED FF FF FF FF CA CB CC CD 02 FF 08 00 00 0F 1D 43 EF 07 A0 05 00 08 00 1E F4 73 00 00 00 00 05 01 08 00 00 9E 57 00 32 01 08 05 10 08 00 2A 00 3B A8 02 21 FA 05 11 08 04 2A 00 3B A8 02 28 AC 05 12 08 08 AE 00 37 57 F0 2A 56 05 13 08 0C 5A 00 37 57 F0 23 EC 05 14 08 10 AE 00 33 07 DE 25 7A 05 15 08 14 5A 00 33 07 DE 2C 4A 05 16 08 18 5A 00 2E A7 CC 27 D2 05 17 08 1C AE 00 2E A7 CC 21 78 07 81 08 7F FF 4B 00 00 47 B0 0F 07 81 08 00 00 00 00 00 45 32 0F 07 81 08 7F FF 4B 01 00 00 30 10 07 81 08 00 00 00 01 00 00 32 10 07 81 08 7F FF 4B 02 00 00 30 11 07 81 08 00 00 00 02 00 00 32 11 07 81 08 58 EF 32 03 00 00 30 12 07 81 08 04 AC 00 13 00 00 32 12 07 81 08 58 EF 32 04 00 00 30 13 07 81 08 07 CC 00 14 00 00 32 13 07 80 08 00 00 01 F4 7F 00 45 42 07 82 08 00 02 4C E5 00 04 00 00 07 83 05 FF FF 00 01 0E 07 83 06 00 00 01 00 00 00 07 83 04 00 00 00 01 8F EA EB EC ED";
我测试过了,没有错啊,是 36 个啊