Nie możesz tego zrobić w samym regexp, ponieważ regexp nie obsługuje matematyki na przechwyconych grupach, nawet jeśli wszystkie są znakami numerycznymi. Musisz więc uzyskać grupę, która reprezentuje numer piętra, wykonać obliczenia i połączyć je z powrotem:
SELECT regexp_replace('B12F34', 'B(\d+)F(\d+)', 'Building \1 - Floor ') ||
((regexp_matches('B12F34', '[0-9]+$'))[1]::int + 10)::text;
Niezbyt wydajny z powodu dwóch wywołań regexp. Inną opcją jest po prostu uzyskanie dwóch liczb w podzapytaniu i złożenie ciągu w zapytaniu głównym:
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;