У меня есть ряд путей к файлам в таблице PostgreSQL, и я использую sh, чтобы получить имя файла без расширения. Показаны некоторые образцы данных (см. Также скрипт здесь ) -
VALUES
(1, '/users/mcm1/ualaoip2/vmm/file1.pdf'),
(2, '/users/mcm1/ualaoip2/vmm/file2.py'),
(3, '/users/mcm1/ualaoip2/vmm/file3.pdf'),
(8, '/users/mcm1/ualaoip2/vmm/file8.tar.gz'),
(9, '/users/mcm1/my_prog.cpp');
Желаемый результат -
file1
file2
file2
file8.tar
my_prog
Теперь я пытался gr asp регулярные выражения (я новичок ie), и я добился некоторого прогресса. Это код, который у меня есть до сих пор -
SELECT regexp_split_to_table(w.file_name, '^/.*/.*/......../.../') AS fn
FROM with_filename w
Результат на данный момент - есть пустая строка до и после каждой второй строки - не понимаю, почему!
fn
file1.pdf
file2.py
file3.pdf
file8.tar.gz
/users/mcm1/my_prog.cpp
Теперь, У меня было несколько проблем -
Я знаю, что мое регулярное выражение - '^/.*/.*/......../.../'
- полный беспорядок. По сути, я жестко кодирую путь к файлу в регулярном выражении, как вы можете видеть. Я не набираю my_prog
, потому что регулярное выражение слишком длинное. Я не уверен, что моя концепция повторяющихся групп верна - например, .*
(я начал с точек везде и после некоторого чтения получил обозначение точка-звезда).
Это оптимальный способ выполнения этого? Я знаю, что должен иметь возможность изменять количество вхождений /../..
- возможно, используя это '^(/.*/)'
?
Наконец, моя главная проблема в том, что я не знаю, как сохранить имя файла и устранить расширение. Могут быть файлы, у которых нет расширения. Буду признателен не только за ответ, но и за объяснение того, что происходит в регулярном выражении! Если требуются дополнительные данные, сообщите мне!