正则表达式匹配后续字符以及匹配的字符串

时间:2017-07-13 13:30:07

标签: regex vbscript

我想要下面数据的正则表达式

0x0040:  1402 080e 0001 0017 0300 08e0 07c1 6e54  ..............nT
0x0050:  639a 4f08 14d3 b314 0208 0e00 01a5 43    c.O...........C
0x0030:  1703 0008 e007 c16e 5463 9a30 0819 bdab  .......nTc.0....
0x0040:  1402 080e 0001 0017 0300 08e0 07c1 6e54  ..............nT      
0x0050:  639b 7908 19bd fb14 0208 0e00 0100 1703  c.y.............

我想从e007开始提取16个字符,如上面粗体所示。 e007不会一起发生,它们将以很多节奏分隔空间

我的预期结果应该是

e007c16e54639a4f  
e007c16e54639a30  
e007c16e54639b79   

请帮我正则表达式来做到这一点。 我的代码是这样的:

Dim fso,re,inFile,outFile,line,str
Set fso = CreateObject("Scripting.FileSystemObject")

Set re = New RegExp

re.Pattern = "((e0\s07)|(e00\s7)|(e007\s)|(e\s007)).{15}"

Set inFile  = fso.OpenTextFile("D:\Report.txt")
Set outFile = fso.OpenTextFile("D:\Result.txt", 2)

Do Until inFile.AtEndOfStream
  line = inFile.ReadLine
  For Each m In re.Execute(line)
    outFile.WriteLine Left(m, 24)
    If Not IsEmpty(str) Then str = str & val
  Next
Loop

If Not IsEmpty(str) Then outFile.WriteLine Left(str, 24)

inFile.Close
outFile.Close

1 个答案:

答案 0 :(得分:1)

由于您的数据似乎是一个hexdump,即具有固定宽度格式的文本,您可能需要从每一行中提取十六进制值并将其转换为允许更容易提取所需值的形式。

假设您有一个包含问题数据的输入文件,您可以执行以下操作:

Set fso = CreateObject("Scripting.FileSystemObject")

data = Split(fso.OpenTextFile("C:\path\to\input.txt").ReadAll, vbNewLine)

For i = 0 To UBound(data)
    data(i) = Replace(Mid(data(i), 10, 39), " ", "")
Next

hexstr = Join(data, "")

Set re = New RegExp
re.Pattern = "e007[0-9a-f]{12}"
re.Global  = True

For Each m In re.Execute(hexstr)
    WScript.Echo m.Value
Next