Nemůžete to udělat v samotném regulárním výrazu, protože regulární výraz nepodporuje matematiku na zachycených skupinách, i když jsou všechny číselné znaky. Takže musíte získat skupinu, která představuje číslo patra, spočítat a spojit to zpět:
SELECT regexp_replace('B12F34', 'B(\d+)F(\d+)', 'Building \1 - Floor ') ||
((regexp_matches('B12F34', '[0-9]+$'))[1]::int + 10)::text;
Není příliš efektivní kvůli dvěma voláním regulárních výrazů. Další možností je získat tato dvě čísla v dílčím dotazu a sestavit řetězec v hlavním dotazu:
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;