A solution I have seen implemented in several shops is to process the string byte by byte, starting in the first non space char, until the first space after that point (or end of field).
All chars not in 0-9, "-", "+" and whatever is defined as decimal point are ignored from a first processing of the string.
E..G.
01 input-string pic x(20) value "bb1,123.45678b234".
01 work-num-int pic X(10).
01 work-num-dec pic X(10).
01 work-num-int-count pic 99.
01 work-num-dec-count pic 99.
01 output-string pic 9(10)V9(10).
01 output-string-r redefines output-string.
05 output-string-int pic 9(10).
05 output-string-dec pic 9(10).
Step 1
work-num-int = "1123bbbbbb"
work-num-int-count = 4
work-num-dec = "45678bbbbb"
work-num-dec-count = 5
Step 2
move work-num-int(1:work-num-int-count) to output-string-int.
As for how to populate the decimal bit I leave that up to you. There are several ways this can be acomplished, and this should make you think on some of the problems that will arise.
The final result would be
output-string = "00000011234567800000"
Note that I have ignored a possible sign. This should be subject to the same type of handling.
Hope this is enough to help you. If not please post whatever code you have done, and w'ill try to give you more pointers