Firstly I would be remiss if I did not point out for future searchers that storing more than one piece of information in a single column violates first normal form of database design and will give you nothing but trouble down the road. Since you are remedying this I salute you!
Secondly using the regex pattern of the form '[^;]+'
to parse delimited strings fails when there are null elements in the list. See here for more info on why that is a bad idea: https://stackoverflow.com/a/31464699/2543416
Now, I'm not all doom and gloom! I don't know what characterset you are using but you'll get the idea. This example uses a regex form that allows for NULL list elements and 1 or more semi-colons followed by a space OR the end of the line.
with tbl(id, str) as (
select 1, '119021-1, г Москва, ул Льва Толстого, д 16; 117312-1, г Москва, ул Вавилова, д 19' from dual union all
select 2, '119021-2, г Москва, ул Льва Толстого, д 16;;; 117312-2, г Москва, ул Вавилова, д 19' from dual
)
select id, regexp_substr(str, '(.*?)(;+ |$)', 1, level, NULL, 1) addr_fixed
from tbl
connect by regexp_substr(str, '(.*?)(;+ |$)', 1, level, NULL, 1) is not null
and prior id = id
and prior sys_guid() is not null;
ID ADDR_FIXED
---------- ---------------------------------------------
1 119021-1, ¿ ¿¿¿¿¿¿, ¿¿ ¿¿¿¿ ¿¿¿¿¿¿¿¿, ¿ 16
1 117312-1, ¿ ¿¿¿¿¿¿, ¿¿ ¿¿¿¿¿¿¿¿, ¿ 19
2 119021-2, ¿ ¿¿¿¿¿¿, ¿¿ ¿¿¿¿ ¿¿¿¿¿¿¿¿, ¿ 16
2 117312-2, ¿ ¿¿¿¿¿¿, ¿¿ ¿¿¿¿¿¿¿¿, ¿ 19
4 rows selected.