c# - 通过正则表达式查找所有匹配的字符串

标签 c# regex

我有一个如下的组合命令字符串,每个命令长度不固定,最小为 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 demo和正则图:

enter image description here

([65])B.*?\1D模式捕获到组 1 a 56数字,然后匹配 B ,然后除换行符外的任何 0+ 个字符尽可能少,直到第一次出现第 1 组中捕获的相同字符后跟 D .

C#代码:

var results = Regex.Matches(s, @"([65])B.*?\1D")
            .Cast<Match>()
            .Select(x => x.Value)
            .ToList();

enter image description here

如果你想在每个 5D 之后拆分或 6D , 只需使用

var results = Regex.Split(s, @"(?!$)(?<=[56]D)");

在这里,(?!$)(?<=[56]D)匹配一个不是字符串结尾的位置,它必须紧跟在 5D 之前或 6D .参见 this regex demo .

enter image description here

关于c# - 通过正则表达式查找所有匹配的字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55756111/

相关文章:

php - 需要一个相当复杂的正则表达式来处理一个简单的文本文档

java - 如何将正则表达式与 String.split() 一起使用

python - 尝试在 python 中使用正则表达式

c# - 实例化代理类 (RealProxy)

regex - Sed 使用,删除/更改文本

c# - 获取二维数组数组中二维数组的数量

c# - 使用 2 维时,R 树能否保持 z 顺序?

javascript - 带有量词的正则表达式 Javascript 捕获组不起作用

c# - Windows Phone 7 - 使用 native DLL - 需要类和接口(interface)的 GUID

c# - 窗口模式帧率与全屏帧率