Regex для всех недопустимых символов имени файла перед расширением типа файла - PullRequest
0 голосов
/ 27 июня 2019

Я ищу Regex, который обменивает все недопустимые символы имени файла, такие как ().и т. д. до того, как тип файла оканчивается, например, .jpg на -

, который я получил: [^ a-zA-Z0-9 _-] + соответствует каждому недопустимому имени файла, но включая расширение файла и. * (? =.)сопоставляя все до последнего вхождения.

как мне их объединить?

одно из моих злых имен файлов (800x800-png) MGC1000-03EPTD-021_RAL7035-5010.tif.png

после замены регулярного выражения должно выглядеть так: -800x800-png-MGC1000-03EPTD-021_RAL7035-5010-tif.png

регулярное выражение должно работать в libre office / excel search и заменять.

спасибо за вашу помощь!

1 Ответ

2 голосов
/ 27 июня 2019

Вы можете использовать класс отрицательных символов [^a-zA-Z0-9_-]+ и использовать положительный прогноз , чтобы утверждать, что строка заканчивается точкой и 1+ символами слова.

При замене используйте дефис -

[^a-zA-Z0-9_-]+(?=.*\.\w+$)

Согласно комментарию от @ Stein вы можете сократить его до:

[^\w-]+(?=.*\.\w+$)

Объяснение

  • [^a-zA-Z0-9_-]+ Соответствует 1+ раз любому персонажу, не входящему в класс символов
  • (?= Позитивный взгляд, утверждаю, что справа
    • .*\.\w+ Совпадение с любым символом 0+ раз, затем точка и 1+ слова с символами
    • $ Утверждение конца строки
  • ) Закрыть позитивный взгляд

Regex demo

Если само расширение может иметь специальные символы, вы можете обновить \w+$ до [^.\s]+$, например:

[^\w-]+(?=.*\.[^.\s]+$)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...