.NET:使用正则表达式查找十六进制字符串

时间:2009-04-29 11:18:05

标签: .net regex

我需要正则表达式的帮助。

我有大量不同内容的文本文件。但是每个文件都包含一个十六进制密钥。每个密钥都有16个十六进制数字("E4 34 F1 FB..."),并始终以"00""01"开头。在某些情况下,它们有一个分隔符(":")。

以下是一些示例键:

00:C461F0538ECC84F1AF43DBBDC49E5DA3
00:F4F599D15353650F1566CFEB5CB891C1
011EC3991261BFD8D74BBCFE1E3108628C
003E05F7730347E43437F1FBCAB3A8B461
018FAE7FFB2DBB64F646F705525DEB25F8
00)339EDE5269DD018C2FD5338AD18C3A2F
00B8491FDF00C618A155350F47349E7B04

如何使用.NET(VB.NET或C#)中的正则表达式从字符串中提取这些键?

以下是一些用于测试的字符串:

KAJSDF00ASLJKHFLAKJSDHFLAK01JSH00:C461F0538ECC84F1AF43DBBDC49E5DA3DFLKJAHSDFJAVHBEVBERJHVBQEJHRVBQJERBV
JKLABDVJ01KBQLKJFBVQLEJKRBVL00:F4F599D15353650F1566CFEB5CB891C1QERBVJHQEBRVJHQBERFVHBQERVJHBQEJH
RVBQJHERVBJHQBRVJHQEBRVJHWEBRV011EC3991261BFD8D74BBCFE1E3108628CWKBERVJHWERFGUQHERULIFHQW
EIFH2FPO00I134FWFQWHEF34HFQREW018FAE7FFB2DBB64F646F705525DEB25F8F2347YQ3EFQO84R93U48UY8RTU13
R1R0100910R14UYR891UYFR1UEF98U1FPH00)339EDE5269DD018C2FD5338AD18C3A2F138294FH190324FU134UF19834YF

3 个答案:

答案 0 :(得分:3)

以下正则表达式将匹配您的密钥并且不区分大小写

(?:00|01):?[a-fA-F0-9]{32}

这假设OP意味着一个32字符串。如果它是16个字符的字符串,则将{32}更改为{16}。

答案 1 :(得分:2)

0[01][\:\(\)]?([0-9A-F]){16}

没有正则表达式解析器来测试这个,但是应该搜索

  • 0,
  • 后跟0或1,
  • 之后可能(但不是强制性地)出现':','('或')'
  • 后跟16个连续字符,可能值为(0123456789ABCDEF)

答案 2 :(得分:1)

    string data = @"KAJSDF00ASLJKHFLAKJSDHFLAK01JSH00:C461F0538ECC84F1AF43DBBDC49E5DA3DFLKJAHSDFJAVHBEVBERJHVBQEJHRVBQJERBVJKLABDVJ01KBQLKJFBVQLEJKRBVL00:F4F599D15353650F1566CFEB5CB891C1QERBVJHQEBRVJHQBERFVHBQERVJHBQEJHRVBQJHERVBJHQBRVJHQEBRVJHWEBRV011EC3991261BFD8D74BBCFE1E3108628CWKBERVJHWERFGUQHERULIFHQWEIFH2FPO00I134FWFQWHEF34HFQREW018FAE7FFB2DBB64F646F705525DEB25F8F2347YQ3EFQO84R93U48UY8RTU13R1R0100910R14UYR891UYFR1UEF98U1FPH00)339EDE5269DD018C2FD5338AD18C3A2F138294F";
    for (Match match = Regex.Match(data, "0[01]:?[0-9A-F]{16}"); match.Success; match = match.NextMatch()) {
        Console.WriteLine(match.Value);
    }