我想要下面数据的正则表达式
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
答案 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