我有一个如下所示的组合命令字符串,每个命令长度都不固定,最小为22,最大为240:
5B01CA0F00000241FF0201040F325D5B01CA0F00000241FF0201040F335D6B01FF0000000010FF01FF0000000F6D5B01CA0F00000241FF0201040F345D5B01CA0F00000241FF0201040F355D6B01FF0000000010FF01FF0000000F6D
我想提取5B .... 5D或6B .... 6D之类的命令,因此预期结果是:
5B01CA0F00000241FF0201040F325D
5B01CA0F00000241FF0201040F335D
6B01FF0000000010FF01FF0000000F6D
5B01CA0F00000241FF0201040F345D
5B01CA0F00000241FF0201040F355D
6B01FF0000000010FF01FF0000000F6D
我使用了正则表达式模式
5B[0-9a-fA-F]{22,240}5D
要么 (?<=5B)([0-9a-fA-F]{22,240})(?=5D)
只有一个匹配,有人可以帮我吗?
string regexPattern = "(?<=5B)([0-9a-fA-F]{22,240})(?=5D)";
string command = txtRegexCmd.Text.Trim();
MatchCollection matchedResults = Regex.Matches(command, regexPattern, RegexOptions.IgnoreCase);
string matchedCmd = string.Empty;
foreach (Match matchResult in matchedResults)
{
matchedCmd += matchResult.Value + ",\r\n";
}
MessageBox.Show(matchedCmd);
您可以使用来匹配它们
([65])B.*?\1D
请参见.NET regex演示和Regulex图:
该([65])B.*?\1D
模式将捕获到组1中的a5
或6
数字,然后进行匹配,然后匹配B
除换行符以外的任何0+字符,直到第一次出现与组1中捕获的相同字符之后,再进行匹配D
。
C#代码:
var results = Regex.Matches(s, @"([65])B.*?\1D")
.Cast<Match>()
.Select(x => x.Value)
.ToList();
如果要在每个5D
或之后拆分6D
,请使用
var results = Regex.Split(s, @"(?!$)(?<=[56]D)");
在此,(?!$)(?<=[56]D)
匹配的位置不是字符串结尾,必须紧跟在5D
或之前6D
。请参阅此正则表达式演示。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句