Vbscript 正则表达式,获取模式

Vbscript 正则表达式,获取模式,vbscript,Vbscript,有一个名为abc.log的日志文件,其中包含许多行,如下所示: Line 8123:Feb 01 19:44:40.961 | INFO | JEZHckpTehtA-ADSW4T14T5 | PROD | 10.86.99.108 | Feb 01 2016 19:44:29.595 | EVNT=SWIdmst | DQLN=YN | DQLN=EQUAL| QUEUE | GOHEAD IT 第8124行:Feb 01 19:44:40.961 | INFO | JEZHckpTehtA-

有一个名为abc.log的日志文件,其中包含许多行,如下所示:

Line 8123:Feb 01 19:44:40.961 | INFO | JEZHckpTehtA-ADSW4T14T5 | PROD | 10.86.99.108 | Feb 01 2016 19:44:29.595 | EVNT=SWIdmst | DQLN=YN | DQLN=EQUAL| QUEUE | GOHEAD IT
第8124行:Feb 01 19:44:40.961 | INFO | JEZHckpTehtA-ADSW4T14T5 | PROD | 10.86.99.108 | Feb 01 2016 19:44:29.595 | EVNT=SWIdmst | DQLN=op。。。。。
第8127行:Feb 01 19:44:40.961 | INFO | JEZHckpTehtA-ADSW4T14T5 | PROD | 10.86.99.108 | Feb 01 2016 19:44:29.595 | EVNT=SWIdmst | DQLN=YN。。。。。。。。。。。
行8129:Feb 01 19:44:40.961 | INFO | JEZHckpTehtA-ADSW4T14T5 | PROD | 10.86.99.108 | Feb 01 2016 19:44:29.595 | EVNT=swimst | DQLN=YN | DQLN=Other|u编号
行8145:Feb 01 19:44:40.961 | INFO | JEZHckpTehtA-ADSW4T14T5 | PROD | 10.86.99.108 | Feb 01 2016 19:44:29.595 | EVNT=swimst | DQLN=YN | Name=QID | Inputs=collname[allNum=12457845,oon=6842703020]| Outputid=00a4028a87c4473f,amid=2353.6,交易时间=125ms。。。。。。。。
第8198行:2月1日19:44:40.961 |信息| JEZHckpTehtA-ADSW4T14T5 |产品| 10.86.99.108 | 2016年2月1日19:44:29.595 |结束。。。。。
我需要在所有行中搜索
QUAL\u QUEUE\u GOHEAD\u IT
,并获取其ID
JEZHckpTehtA-ADSW4T14T5
。然后在所有行中搜索该id,如果在以该id开头的行中找到了
DQLN=Other\u number
,并且在具有相同id的任何行中也找到了
EOT\u Dealer\u PullAHead\u ETQ
,则 将同一id中存在的
RuleName=GetPayoffInfo | Inputs=[accountNu…..
行提取到另一个记事本

我有下面的代码,它创建了一个新的textpad,但是里面什么都没有,它说的是
nomatch
,但是日志文件包含代码中提到的所有字符串

Const ForReading = 1
Set objFSO = CreateObject("Scripting.FileSystemObject")

'create a new text file
Set word_found1 = objFSO.CreateTextFile("C:\Users\hara\Desktop\tq\abc.log", True)

Set objFileToRead = objFSO.OpenTextFile _
    ("C:\Users\hara\Desktop\tq\testt1.txt", ForReading)

Do Until objFileToRead.AtEndOfStream
    strFileText = objFileToRead.ReadLine

    Set re = New RegExp
    re.Pattern = "INFO \| ([^\|]*) \|.*QUAL_QUEUE_GOHEAD_IT"
    re.Global = True
    Set matches = re.Execute(strFileText)
    If matches.Count > 0 Then
        msg = "Found " & matches.Count & " matches:" & vbCRLF
        For Each match In Matches
            varid = match.SubMatches(0)
        Next
        word_found1.WriteLine strFileText
    Else
        MsgBox "No match", 0, "VBScript Regular Expression Tester"
    End If
Loop

objFileToRead.Close

在您的测试数据中添加一些带有EOT\u Dealer\u PullAHead\u ETQ的行,以便我们能够正确解释您的问题。如果数据是分隔的,就像在示例数据中一样,则使用Split而不是RegEx。当您在循环中进行测试时,将为每一个不匹配的行获得一个不匹配的msgbox。请尝试添加
word\u found1.Close()
objFileToRead.Close()之后以便刷新写入流。还有一个在获得匹配时设置的标志。然后在最后,如果未设置该标志,则显示您的
不匹配
MessageBox。您可以让我知道如何通过拆分函数搜索字符串QUAL_QUEUE_GOHEAD_来获取id JEZHckpTehtA-ADSW4T14T5。添加一些带有E的行吗OT_Dealer_PullAHead_ETQ添加到您的测试数据中,以便我们能够正确解释您的问题。如果数据是分隔的,就像在示例数据中一样,那么使用Split而不是RegEx。在循环中测试时,您将得到不匹配的每一行msgbox。请尝试添加
word_found1.Close()
objFileToRead.Close()之后以便刷新写入流。还有一个在获得匹配时设置的标志。然后在最后,如果未设置该标志,则显示您的
不匹配
MessageBox。您可以让我知道如何通过拆分函数搜索字符串QUAL_QUEUE_GOHEAD_获取id JEZHckpTehtA-ADSW4T14T5。。