The following does what you want for your original string:
with xx as (
select 'id9' idno,'untest X456789,W357987 and Q321089 cont group' test from dual
)
select idno,
REGEXP_replace(test,
'([A-Z]{1}[0-9]{6}[ ,]?)|(.)', '\1'
) AS test
from xx;
Getting the second space to be a comma . . . you can use a regular replace:
with xx as (
select 'id9' idno,'untest X456789,W357987 and Q321089 cont group' test from dual
)
select idno,
replace(REGEXP_replace(test,
'([A-Z]{1}[0-9]{6}[ ,]?)|(.)', '\1'
),
' ', ',') AS test
from xx;
The SQL Fiddle is here.