Не можете да направите това само в regexp, тъй като regexp не поддържа математически изчисления на уловени групи, дори ако всички те са цифрови знаци. Така че трябва да получите групата, която представлява номера на етажа, да направите изчислението и да я свържете обратно:
SELECT regexp_replace('B12F34', 'B(\d+)F(\d+)', 'Building \1 - Floor ') ||
((regexp_matches('B12F34', '[0-9]+$'))[1]::int + 10)::text;
Не е много ефективен поради двете извиквания на regexp. Друг вариант е просто да получите двете числа в подзаявка и да сглобите низа в основната заявка:
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;