我正在寻找可交换所有非法文件名字符(如()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搜索和替换中工作。
感谢您的帮助!
答案 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 $
声明字符串的结尾)
积极回望如果扩展名本身可以包含特殊字符,则可以将\w+$
更新为[^.\s]+$
,例如:
[^\w-]+(?=.*\.[^.\s]+$)