But is there any other Best Way to do this.
Define "best". I think your query is fine, unless you are having any performance issues. By the way, REGEXP_REPLACE would be a costlier operation, and would be slower than traditional REPLACE. Regular expressions are CPU intensive operations, though with newer releases the difference in performance is narrowing down, however, they are still slower than traditional functions.
By the way, you might want to TRIM the extra space after replacing the string.
SQL> column str format a5
SQL> WITH DATA(emp_desc) AS(
2 SELECT 'scott aah' FROM dual UNION ALL
3 SELECT 'allen ooh' FROM dual
4 )
5 SELECT TRIM(REPLACE(REPLACE(emp_desc,'aah'),'ooh')) str FROM DATA;
STR
-----
scott
allen
SQL>
replaceon each pattern..