Oracle query to split 1 row into two where conditions are applicable
I'd solve the problem by providing a PL/SQL procedure that knows the "split"-logic.

In the example below I assume that non-splitted rows are not inserted into the table at all but all inserts should be done with the procedure. This is a rather common pattern when there's data manipulations but it is not clear from your problem statement if this is an acceptable solution in your case.

I used regular expressions as it's a very handy tool for pattern matching with superior expressiveness and clarity compared to substr(instr()) spaghetti.

I didn't used triggers as it's not possible to modify the table trigger is attached to.

The solution can be easily applied even if you need to read the input data (i.e. non-splitted) from the same table.

Example

create table cr1_t(
 id number
,orig_id number
,old varchar2(24)
,new varchar2(24)
);

create sequence cr1_s;

create or replace procedure cr1_insert(
  p_id in number
 ,p_old in varchar2
 ,p_new in varchar2
) is
  -- the p_*-variables are visible in the nested subprogram
  procedure insert_if(p_pattern in varchar2) is
    v_old constant varchar2(32767) := regexp_substr(p_old, p_pattern);
    v_new constant varchar2(32767) := regexp_substr(p_new, p_pattern);
  begin
    -- insert only if the values are different
    if v_old &lt;&gt; v_new
    then 
      insert into cr1_t(id, orig_id, old, new) values (cr1_s.nextval, p_id, v_old, v_new);
    end if;
  end;
begin
  -- https://en.wikipedia.org/wiki/Tuple
  -- note the separator doesn't matter

  -- the pattern will match the first member of a "2-tuple"
  -- regexp explained:
  -- ^           anchor the pattern to the beginning of a string
  -- [[:upper:]] any uppercase character
  -- -           character '-'
  -- [[:upper:]] any uppercase character
  -- 
  insert_if(p_pattern =&gt; '^[[:upper:]]-[[:upper:]]');

  -- the pattern will match the second member of a "2-tuple"
  -- (T-[[:upper:]])$
  -- regexp is similar than above but now the search is anchored to the end of the string ($):
  insert_if(p_pattern =&gt; '[[:upper:]]-[[:upper:]]$');  
end;
/


Test run

begin
  for i in (with data(id, old, new) as (
              select 10, 'L-D / T-E', 'L-E / T-E' from dual union all
              select 20, 'L-D / T-E', 'L-D / T-D' from dual union all
              select 30, 'L-D / T-E', 'L-E / T-D' from dual union all
              select 40, 'A-B | C-D', 'A-E | C-D' from dual union all
              select 50, 'L-D / T-E', 'L-D / T-E' from dual
            ) select * from data)
  loop
    cr1_insert(i.id, i.old, i.new);
  end loop;
end;
/

select * from cr1_t;

ID ORIG_ID OLD NEW
-- ------- --- ---
 1      10 L-D L-E
 2      20 T-E T-D
 3      30 L-D L-E
 4      30 T-E T-D
 5      40 A-B A-E