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