Du kan inte göra detta enbart i regexp eftersom regexp inte stöder matematik på infångade grupper även om de alla är numeriska tecken. Så du måste hämta gruppen som representerar våningsnumret, räkna ut och skarva in det igen:
SELECT regexp_replace('B12F34', 'B(\d+)F(\d+)', 'Building \1 - Floor ') ||
((regexp_matches('B12F34', '[0-9]+$'))[1]::int + 10)::text;
Inte särskilt effektivt på grund av de två regexp-anropen. Ett annat alternativ är att bara hämta de två siffrorna i en underfråga och sätta ihop strängen i huvudfrågan:
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;