「別の文字列」の背後に何が隠れているかに応じて、次のことを回避できます。
Dim sAll : sAll = goFS.OpenTextFile("..\data\15168620.txt").ReadAll()
WScript.Echo sAll
WScript.Echo "--------"
Dim reX : Set reX = New RegExp
reX.Global = True
reX.Pattern = "<FX>[\s\S]*?(<FX>[\s\S]+?</FX>)"
Dim oMTS : Set oMTS = reX.Execute(sAll)
Dim oMT
For Each oMT in oMTS
WScript.Echo oMT.SubMatches(0)
WScript.Echo "--------"
Next
出力:
some strings...
<FX>
another strings...
<FX>
<TEG1>
<TEG2>
</TEG2>
</TEG1>
</FX>
some strings...
<FX>
<FX>
<TEG1>
</TEG1>
</FX>
--------
<FX>
<TEG1>
<TEG2>
</TEG2>
</TEG1>
</FX>
--------
<FX>
<TEG1>
</TEG1>
</FX>
--------
アップデート:
歩行者のアプローチを回避できることを願っています。
Dim sAll : sAll = goFS.OpenTextFile("..\data\15168620-2.txt").ReadAll()
WScript.Echo sAll
WScript.Echo "--------"
Dim aAll : aAll = Split(sAll, "FX>")
Dim sTry
For Each sTry In aAll
If "</" = Right(sTry, 2) Then
WScript.Echo "<FX>" & sTry & "FX>"
WScript.Echo "--------"
End If
Next
出力:
some strings...
<FX>
another <FX> strings...
<FX><FX><FX><FX><FX>
<FX>
<FX>
<TEG1>
<TEG2>
</TEG2>
</TEG1>
</FX>
some strings...
<FX>
<FX>
<TEG1>
</TEG1>
</FX>
--------
<FX>
<TEG1>
<TEG2>
</TEG2>
</TEG1>
</FX>
--------
<FX>
<TEG1>
</TEG1>
</FX>
--------
更新 II:
歩行者のアプローチ - 行ごとに読み取り、各 <FX>
で新しいコレクションを開始し、 でコレクション/出力を処理します</FX>
。
Dim alLines : Set alLines = CreateObject("System.Collections.ArrayList")
alLines.Capacity = 500
Dim oTS : Set oTS = goFS.OpenTextFile("..\data\15168620-2.txt")
Do Until oTS.AtEndOfStream
Dim sLine : sLine = oTS.Readline()
Select Case True
Case "<FX>" = Left(sLine, 4)
alLines.Clear
alLines.Add sLine
Case "</FX>" = Left(sLine, 5)
alLines.Add sLine
WScript.Echo Join(alLines.ToArray(), vbCrLf)
WScript.Echo "--------"
Case Else
alLines.Add sLine
End Select
Loop
oTS.Close
出力:
<FX>
<TEG1>
<TEG2>
</TEG2>
</TEG1>
</FX>
--------
<FX>
<TEG1>
</TEG1>
</FX>
--------