You could use this:
WITH temp AS (
    SELECT '425874761-G #463733361-S #48310-S' col1 FROM dual
)
SELECT 
    --REGEXP_SUBSTR(t.col1, '[^#]+', 1, levels.column_value) AS split_rows,
    REGEXP_SUBSTR(REGEXP_SUBSTR(t.col1, '[^#]+', 1, levels.column_value), '[^-]+', 1, 1) AS col1,
    REGEXP_SUBSTR(REGEXP_SUBSTR(t.col1, '[^#]+', 1, levels.column_value), '[^-]+', 1, 2) AS col2
FROM 
    temp t,
    TABLE(CAST(MULTISET(SELECT level FROM dual CONNECT BY level <= LENGTH (REGEXP_REPLACE(t.col1, '[^#]+'))  + 1) AS sys.OdciNumberList)) levels;
This answer refer solution from string_to_rows and string_to_columns