When you test it in the HL7 testing tool it will parsed as follow
1(0).1(0).0(0).OBR(0) : >|1|402485836
1(0).1(0).1(0).OBX(0) : >|1|NM|3094-0^
1(0).1(0).1(0).OBX(1) : >|2|NM|2160-0^
1(0).1(0).1(0).NTE(0) : >|1||Effective 8/4
1(0).1(0).1(1).OBX(0) : >|3|NM|17861-6^
1(0).1(0).1(1).OBX(1) : >|4|NM|2345-7^G
So there are two groups and the iterate will pass two times.
changing only outbound 1(0).1(0).1(0).OBX(0) and 1(0).1(0).1(1).OBX(0)
As suspected:
1(0).1(0).1(0).OBX(0) : >|1|NM|BMP^BMP^
1(0).1(0).1(0).OBX(1) : >|2|NM|2160-0^
1(0).1(0).1(0).NTE(0) : >|1||Effective 8/4
1(0).1(0).1(1).OBX(0) : >|3|NM|BMP^BMP^C
1(0).1(0).1(1).OBX(1) : >|4|NM|2345-7
a solution is to do an OBX segment iteration in the OBX groups iteration
The result will be what you want i think
1(0).1(0).1(0).OBX(0) : >|1|NM|BMP^BMP
1(0).1(0).1(0).OBX(1) : >|2|NM|BMP^BMP
1(0).1(0).1(0).NTE(0) : >|1||Effective 8/4/
1(0).1(0).1(1).OBX(0) : >|3|NM|BMP^BMP
1(0).1(0).1(1).OBX(1) : >|4|NM|BMP^BMP