\w+
будет соответствовать только одной или нескольким буквам, цифрам или _
. Он не будет соответствовать остальным символам, которые могут составлять допустимое имя файла. Кроме того, ваш (?<!\.)
lookbehind является избыточным, потому что предыдущий lookbehind уже исключает точку в этой позиции.
Кроме того, вам не нужно повторять шаблон запятой, вы можете использовать группировку только для расширений.
Вы можете использовать
(?<=\/|^)([^\/]+)(\.(?:mov|py))$
См. эту демонстрацию регулярного выражения
(?<=\/|^)
- /
или начало строки разрешено сразу слева ([^\/]+)
- Группа 1: любой один или несколько символов, кроме /
(\.(?:mov|py))
- Группа 2: символ .
, а затем либо mov
, либо py
$
- конец строки /
Обратите внимание, что вы также можете заменить (?<=\/|^)
на (?<![^\/])
в реальном коде, поскольку он будет работать так же с автономными строками. Это испортит результаты демонстрации на regex101.com, потому что там вы проверяете одну многострочную строку (именно поэтому я добавил \n
к классу инвертированных символов и там).