正则表达式用于文件类型扩展名之前的所有非法文件名字符

时间:2019-06-27 17:03:35

标签: regex character filenames

我正在寻找可交换所有非法文件名字符(如()space)的正则表达式。等在文件类型以。

结尾的.jpg之前

我得到了: [^ a-zA-Z0-9 _-] + 匹配每个非法文件名char,但包括文件扩展名 和 。*(?=。) 匹配所有内容,直到最后一次出现。

我如何结合这些?

我邪恶的文件名之一是 (800x800-png)MGC1000-03EPTD-021_RAL7035-5010.tif.png

正则表达式替换后,它应该看起来像 -800x800-png-MGC1000-03EPTD-021_RAL7035-5010-tif.png

正则表达式应该在libre office / excel搜索和替换中工作。

感谢您的帮助!

1 个答案:

答案 0 :(得分:2)

您可以使用negated character class [^a-zA-Z0-9_-]+并使用positive lookahead来声明字符串以点和1+个单词字符结尾。

在替换中,使用连字符-

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

根据@Stein的评论,您可以将其缩短为:

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

说明

  • [^a-zA-Z0-9_-]+匹配1次以上任何不在字符类中的字符
  • (?=正向前进,断言右边是
    • .*\.\w+匹配任意字符0次以上,然后匹配一个点和1个以上的字符char
    • $声明字符串的结尾
  • )积极回望

Regex demo

如果扩展名本身可以包含特殊字符,则可以将\w+$更新为[^.\s]+$,例如:

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