Mir scheint, dass diese Zeile falsch ist.
Pos2 := Pos(SearchTextB, stext, Pos1 + 1) + Length(SearchTextA);
Die Suche muss ab Pos1 + 1 + Length(SearchTextA) beginnen.
Pos2 := Pos(SearchTextB, stext, Pos1 + 1 + Length(SearchTextA));
Die Längenermittlung vor den Beginn der zweiten Suche muss mit in den Funktionaufruf von Pos und nicht zum Ergebnis der zweiten Pos addiert werden.
Es ist letztlich ein Problem der Klammersetzung.
Um das genauer zu erklären,
mit Pos1+1 findet das zweite Pos/PosEx natürlich das " im ersten Suchstring,
darum muß die zweite Suche
auch hinter dem ersten Suchstring begonnen werden.
Wenn der zweite Suchstring nicht im Ersten vorkäme, ware es egal. (man könnte die zweite Suche also an der selben Position beginnen, wie die Erste, auch wenn es sinnlos wäre, aber zumindestens paar Byte Code sparen täte)
z.B. nach
'"|'
suchen