有一个用于解析变量名称及其格式的正则表达式。
var pattern= @"\{(.*?)(:.+?)?\}"
var str="0x57{Nbyte:X2}hhh"
var matches = Regex.Matches(str, pattern)
match.Groups[0].Value - все выражение {Nbyte:X2}
match.Groups[1].Value - имя переменной Nbyte
match.Groups[2].Value - формат :X2
如果工程师错误地设置了字符串
var str = "0x57{Nbyte:X2 fff {CRCXor[0x02-0x03]:X2}";
{Nbyte:X2 - забыли закр. скобку
然后程序正在谈论一个错误(这很好))),现在有一堆新协议,这种情况可能是有效的。那些。{Nbyte:X2
解析时只需要忽略,只选择{CRCXor[0x02-0x03]:X2} строку
.
Резульат парсинга:
match.Groups[0].Value - все выражение {Nbyte:X2 fff {CRCXor[0x02-0x03]:X2}
match.Groups[1].Value - имя переменной Nbyte
match.Groups[2].Value - формат :X2 fff {CRCXor[0x02-0x03]:X2
我认为有必要设置一个规则 - 所选行内不应有括号,{}。请帮我为 {,} 添加排除规则
https://regex101.com/r/SK6Eax/2
这是PotroNik在对该问题的评论中编写的正则表达式的更正确版本。
修复了字符类内部的过度转义。
并且表达式中的字符
:
被放置在组之外(如果它只是一个分隔符,那么在我看来,捕获它是没有意义的)。细微差别:这里两个组的内容不是可选的 - 也就是说,它只会在冒号前后至少有一个字符时匹配......并且空格字符不会被表达式“过滤”。
大概是这样的: