Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/336.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 大字节数组上的正则表达式转换为字符串,返回错误结果_C#_Regex - Fatal编程技术网

C# 大字节数组上的正则表达式转换为字符串,返回错误结果

C# 大字节数组上的正则表达式转换为字符串,返回错误结果,c#,regex,C#,Regex,我已将一个非常大的字节数组转换为字符串,以便使用正则表达式进行搜索。我正在寻找的模式给我带来了麻烦。在字节形式中,我将寻找这样的十六进制表示:3f3f41351b543f。我之所以这样说是因为识别因子是字符串中3f的重复。我使用的模式是[3f]{2,8},但这会返回包含三到八个f的字符串。我的问题是如何在一个较大的字符串中搜索16个字符长的子字符串,其中包含序列3f的重复出现。我很难为情地问这个问题,但我肯定已经尝试过自己解决这个问题,并且在网上查看了一些论坛 最新消息:感谢smead的支持,并

我已将一个非常大的字节数组转换为字符串,以便使用正则表达式进行搜索。我正在寻找的模式给我带来了麻烦。在字节形式中,我将寻找这样的十六进制表示:3f3f41351b543f。我之所以这样说是因为识别因子是字符串中3f的重复。我使用的模式是[3f]{2,8},但这会返回包含三到八个f的字符串。我的问题是如何在一个较大的字符串中搜索16个字符长的子字符串,其中包含序列3f的重复出现。我很难为情地问这个问题,但我肯定已经尝试过自己解决这个问题,并且在网上查看了一些论坛

最新消息:感谢smead的支持,并对Wiktor Stribiżew和Chris Britt的尊重,因为他们没有在我的第一篇帖子中提出足够清晰的问题。我已经尝试了smead的答案,效果很好。非常感谢大家

进一步更新。这里的情况有了一些发展,我仍在努力探索正则表达式的世界。我将更加简洁,因为我仍然需要帮助,如果我得到任何帮助,我将不胜感激。 我正在用c语言编程,正在搜索一个小型转储文件。我知道有其他更有效的搜索小型垃圾场的方法,但这就是任务:

我有一个非常非常长的字符串,我通过读取文件的字节,然后使用Stringbuilder转换它们,这样我就可以用正则表达式解析它们。字符串如下所示: 000000 28353B02000000B8ECC70400000000006C21C804000000028353B02000000000AD35C80408000000003F3F093F3F5F2C000000000836C3040000000343B3B02000000000AD35C80408000000003E3E083E3E5E2C00000000AD35B80408000000003E3E3E5E2C00000000AC35C80408000000003F3F093F3F5F2C00000000AD35B80408000000003F3F093F3F53F3F3F5F2C00000000AD35B80408000000003F3F3F093F3F3F3F3F3F3F5F2C00000000CF4C700000000803CF4C8035003CF4C700000000C620436B0260683B02C4C638020000000018E9C704010000003100000000282FC804D84D360200000000000000000000000000

…但远不止这些。现在我要做的是搜索整个字符串,并将匹配返回到如下所示的序列:

3F3F093F3F5F2C

我得到的信息是,在子字符串中的16个字符中,将包含序列3F>3,[3F]匹配3或f

你只需要去掉方括号:

(3f){2,8}

如果我理解正确,您希望选择长度为16的子字符串,从3F开始,然后如果子字符串包含3F的次数超过3次但少于8次,则子字符串适合您。看看下面的代码

void Main()
{
    string data ="000000283533F5F2C00000000AD35B8040800000B0200000000B8ECC70400000000000000006C21C8040000000028353B0200000000AD35C804080000003F3F093F3F3F5F2C000000000836C3";
    string pat = "(3F.{14})";
    string pat2 = "3F";
    var rg = new Regex(pat);

    var data2 = rg.Matches(data);
    foreach (Match  mat in  data2 )
    {
        string potentialMatch =  mat.Value; 

        int count = Regex.Matches(potentialMatch, pat2).Count;
        if (count>3 && count<8)
        {
         Console.WriteLine(potentialMatch);
        }

    }

}

这相当不清楚3f{8}?请看一看,并了解如何最好地修改和格式化您的问题,以便清楚您想问什么。@WiktorStribiżew和@ChrisBritt我已尽最大努力为您澄清我的问题,并且仍将感谢您就这一主题提供的任何信息。我还没有脱离困境,请允许如果你有时间,你可以看到我的更新。谢谢你到目前为止的帮助。@Dedalous不幸的是,我认为你的要求对于Regex来说太复杂了。您必须用代码编写自己的算法。另外,是否有必须将其转换为字符串的原因?我认为只留下一个字节数组会更容易。