Bạn không thể thực hiện điều này một mình trong regexp vì regexp không hỗ trợ toán học trên các nhóm đã được capture ngay cả khi chúng đều là các ký tự số. Vì vậy, bạn phải lấy nhóm đại diện cho số sàn, làm phép toán và ghép nó lại trong:
SELECT regexp_replace('B12F34', 'B(\d+)F(\d+)', 'Building \1 - Floor ') ||
((regexp_matches('B12F34', '[0-9]+$'))[1]::int + 10)::text;
Không hiệu quả lắm vì hai lệnh gọi regexp. Một tùy chọn khác là chỉ lấy hai số trong một truy vấn phụ và tập hợp chuỗi trong truy vấn chính:
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;