Você não pode fazer isso em regexp sozinho porque regexp não suporta matemática em grupos capturados, mesmo que sejam todos caracteres numéricos. Então você tem que pegar o grupo que representa o número do andar, fazer as contas e juntar de volta:
SELECT regexp_replace('B12F34', 'B(\d+)F(\d+)', 'Building \1 - Floor ') ||
((regexp_matches('B12F34', '[0-9]+$'))[1]::int + 10)::text;
Não muito eficiente por causa das duas chamadas regexp. Outra opção é apenas pegar os dois números em uma subconsulta e montar a string na consulta principal:
SELECT format('Building %L - Floor %L', m.num[1], (m.num[2])::int + 10)
FROM (
SELECT regexp_matches('B12F34', '[0-9]+', 'g') AS num) m;